2013-03-20 118 views
0
SELECT b.PlateNumber, BusModel, Count(DISTINCT d.StaffID) AS NumberOfDirvers 
FROM Bus b, Trip t, Driver d, Staff s 
WHERE b.PlateNumber = t.PlateNumber 
AND t.StaffID = d.StaffID 
AND d.StaffID = s.StaffID 
AND b.capacity = 72 
AND EXTRACT(MONTH FROM s.DateOfBirth) BETWEEN '07' AND '12' 
GROUP BY PlateNumber, BusModel; 

顯然有一些總線還沒有任何驅動程序的任何旅程,但我的代碼似乎無法顯示驅動程序的數量爲0.我該如何顯示它?SQL子查詢計數

問:

。總線容量,說72,找到一組具有指定容量公交車。

對於EVERY總線在集合,列表:

  • (i)所述總線板數,
  • (ii)所述模型,和
  • (ⅲ)的獨特的總數在7月至12月之間出生的司機,同時駕駛公共汽車(如果沒有這樣的司機,預期爲0)。
+1

考慮提供一些示例數據和預期的結果,以提高您的查詢 - 理想的DDL和/或Sqlfiddle – Strawberry 2013-03-20 10:31:24

回答

1

使用IFNULL(value, 0)顯示0未找到任何驅動程序。你可能還喜歡用JOINS

SELECT b.PlateNumber, BusModel, IFNULL(Count(DISTINCT d.StaffID), 0) AS NumberOfDirvers 
FROM Bus b LEFT JOIN Trip t ON b.PlateNumber = t.PlateNumber 
LEFT JOIN Driver d ON t.StaffID = d.StaffID 
LEFT JOIN Staff s d.StaffID = s.StaffID 
WHERE EXTRACT(MONTH FROM s.DateOfBirth) BETWEEN '07' AND '12' 
GROUP BY b.PlateNumber, BusModel; 
+0

我在哪裏可以在IFNULL寫(數值,0)? – skaaby 2013-03-20 10:39:28

+0

@skaaby - 請參閱最新的答案。 – MuhammadHani 2013-03-20 10:56:21

+0

@穆罕默德哈尼。 。 。 'ifnull'是完全沒有必要的。如果沒有匹配,COUNT(DISTINCT)'將返回0。 – 2013-03-20 13:22:26