我有兩個表,一個名爲日曆,另一個名爲事件。日曆中可以有多個日曆和多個事件。我想選擇每個日曆,並獲取日曆中的事件數量。SQL:獲得從左連接返回的行數
這是我有:
SELECT C.*, COUNT(*) AS events FROM `calendars` AS C
LEFT JOIN `events` E ON C.ID=E.calendar
GROUP BY C.ID
但是,這並不工作。 沒有事件的項目仍然返回1。 有什麼想法?
我有兩個表,一個名爲日曆,另一個名爲事件。日曆中可以有多個日曆和多個事件。我想選擇每個日曆,並獲取日曆中的事件數量。SQL:獲得從左連接返回的行數
這是我有:
SELECT C.*, COUNT(*) AS events FROM `calendars` AS C
LEFT JOIN `events` E ON C.ID=E.calendar
GROUP BY C.ID
但是,這並不工作。 沒有事件的項目仍然返回1。 有什麼想法?
的問題是,you're計數行,而沒有的活動日曆,還有他的日曆的一行。
試試這個:
SUM(case when e.Calendar is null then 0 else 1 end)
您需要使用
COUNT(E.calendar)
的行不匹配的這個值將是NULL
和NULL
值不計算在內。
哇!這比接受的答案更簡單,謝謝! – dimsuz 2014-06-27 10:43:21
如何:
SELECT C.*, (SELECT COUNT(*) FROM events E WHERE E.calendar=C.ID) as NumEvents
FROM calendars C
試試這個:
SELECT C.*,
(
SELECT COUNT(*)
FROM [events] AS E
WHERE E.calendar = C.ID) AS [events]
FROM [calendars] AS C;
這工作完美,並沒有涉及低效率的子選擇。謝謝! – 2011-02-14 15:52:27