2013-03-19 52 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