我有两个表,一个名为日历,另一个名为事件。日历中可以有多个日历和多个事件。我想选择每个日历,同时获取日历中的活动数量。
这就是我所拥有的:
SELECT C.*, COUNT(*) AS events FROM `calendars` AS C
LEFT JOIN `events` E ON C.ID=E.calendar
GROUP BY C.ID
但这不起作用。 没有活动的项目仍会返回1 。 有什么想法吗?
答案 0 :(得分:18)
您需要使用
COUNT(E.calendar)
在没有匹配项的行中,其值为NULL
且NULL
值不计算在内。
答案 1 :(得分:7)
问题是你在计算行数,而且没有事件的日历仍然有一行他的日历。
试试这个:
SUM(case when e.Calendar is null then 0 else 1 end)
答案 2 :(得分:1)
怎么样:
SELECT C.*, (SELECT COUNT(*) FROM events E WHERE E.calendar=C.ID) as NumEvents
FROM calendars C
答案 3 :(得分:0)
试试这个:
SELECT C.*,
(
SELECT COUNT(*)
FROM [events] AS E
WHERE E.calendar = C.ID) AS [events]
FROM [calendars] AS C;