Mysql 如何在左联接查询中计数

Mysql 如何在左联接查询中计数,mysql,Mysql,如何计算event_Attendants表中的参与者人数。这是我的桌子 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

如何计算event_Attendants表中的参与者人数。这是我的桌子

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
你的问题是这样的

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;

您得到的结果是正确的,因为您正在计算所有记录

如果需要每个事件地点的计数,则应按事件地点分组

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,; 

似乎有几个问题

我想你想要一份所有偶数地点的名单,以及每个地点的人数。如果是这样,则表明您需要将event_参与者表与event_place表连接起来,而不是反过来连接。这样,您可以列出没有参与者的位置

您还需要一个GROUPBY子句

如果使用COUNT(*),则计算返回的行数(在分组之前)。但是,如果没有匹配的参与者,那么仍然会为该位置返回一行,因此您将得到1作为计数。要避免这种情况,请在参与者表上的COUNT()中指定一列。COUNT with a column name统计该列的非空值的数量,因此,如果没有参与者,它将为该位置返回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

研究小组byYou可以使用
小组BY
,虽然这段代码片段是受欢迎的,并且可能会提供一些帮助,但这将是解决问题的方式和原因。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请在回答中添加解释,并说明适用的限制和假设。如何显示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