如何计算event_participants表中的参与者数量。这是我的表
event_place
id | name
1 | New York
2 | Canada
event_participants
id | event_place_id | name
1 | 1 | Jon
2 | 1 | Mike
3 | 2 | Van
我的查询结果错误
SELECT count(*) as count
FROM event_participants as t1
LEFT JOIN event_place as t2
ON t1.event_place_id = t2.id;
,结果是3
我应该得到像这样的结果
New York | 2
Canada | 1
答案 0 :(得分:0)
你的查询就像这样。
select pl.id,pl.name,count(*) from
event_place pl
left join event_participants ep
on pl.id = ep.event_place_id
group by pl.id;
答案 1 :(得分:0)
您正在计算所有记录,但结果正确。
如果您想要每个事件的计数位置,您应该是GROUP BY事件地点
SELECT t1.event_place_id, t2.name, count(*) as count
FROM event_participants as t1
LEFT JOIN event_place as t2
ON t1.event_place_id = t2.id
GROUP BY t1.event_place_id, t2.name,;
答案 2 :(得分:0)
NULL
答案 3 :(得分:0)
似乎有几个问题。
我认为你想要一个所有偶数位置的列表,以及每个位置的人数。如果是这样,则表明您需要将event_participants表LEFT OUTER JOIN连接到event_place表,而不是相反。这样,您可以列出没有参与者的地方。
您还需要GROUP BY子句。
如果使用COUNT(*),则计算返回的行(在分组之前)。但是,如果没有匹配的参与者,那么仍然会为该地点返回一行,因此您将得到1作为计数。为避免这种情况,请在参与者表上的COUNT()中指定一列。带有列名的COUNT计算该列的非NULL值的数量,因此如果没有参与者,它将为该位置返回0: -
SELECT t2.name,
COUNT(t1.id) AS count
FROM event_place t2
LEFT JOIN event_participants t1
ON t1.event_place_id = t2.id
GROUP BY t2.name