如何计算左连接查询

时间:2017-02-22 09:26:31

标签: mysql

如何计算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

4 个答案:

答案 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