2017-02-22 69 views
0

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

組你可以使用'GROUP BY' [鏈接] (https://www.w3schools.com/sql/sql_groupby.asp) –

回答

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

如何顯示0結果也 –

0
select a.name, count(1) from event_place a, event_participants b 
where b.event_place_id = a.id 
group by a.name; 
+1

雖然此代碼段是受歡迎的,並且可能會提供一些幫助,它會[大大改善,如果它包括* how *和* why *解釋](// meta.stackexchange.com/q/114762)解決問題。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –

0

似乎有幾個問題。

我認爲你想要一個所有偶數地方的列表,以及每個人的人數。如果是這樣,則表明您需要將event_participants表中的LEFT OUTER JOIN加入到event_place表中,而不是其他方式。這樣您可以列出沒有參與者的地點。

您還需要一個GROUP BY子句。

如果您使用COUNT(*)計算返回的行(在分組之前)。但是,如果沒有匹配的參與者,則該地點仍然會返回一行,因此您將得到1作爲計數。爲避免這種情況,請在參與者表中指定一個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