2013-03-19 72 views
6

對於兩個表SELECT COUNT跨越一個一對多的關係

球員

隨着1-∞關係(玩家組隊):你如何計算每支球隊有多少球員?

失敗的嘗試:

SELECT team.teamid, (SELECT COUNT(player.team) FROM player) 
FROM team 
LEFT JOIN player ON player.team = team.teamid 
+1

請通過添加適當的標記(Oracle,SQL Server,MySQL等)來指定您要定向的RDBMS。可能會有利用不被普遍支持的語言或產品功能的答案。此外,通過使用特定的RDBMS標記它,您的問題可能會從更適合回答的人那裏得到關注。 – Taryn 2013-03-19 17:34:52

+0

哦,當然。它的MySQL:在這種情況下,假設SQL是如此通用,以至於它沒有區別 – Stumbler 2013-03-19 17:45:35

+1

它可能是直截了當的sql,但您應該始終指定您正在使用的rdbms。 :) – Taryn 2013-03-19 17:48:31

回答

16

嘗試

SELECT t.teamid, COUNT(p.team) player_count 
FROM team t LEFT JOIN 
    player p ON p.team = t.teamid 
GROUP BY t.teamid 

SQLFiddle

它將給正確的結果事件,如果有的球隊沒有球員分配。請參閱sqlfiddle(團隊3沒有玩家)。

+0

你可以使用WHERE不JOINs實現相同的結果嗎? – f1ames 2013-05-10 06:48:06

+0

@ f1ames這是什麼原因? – peterm 2013-05-10 07:11:40

+0

好奇心,我更喜歡使用WHERE而不是JOIN。另外我有不知何故複雜的查詢加入3表,它更容易修改它比創建全新的查詢與連接:) – f1ames 2013-05-10 07:28:58