【发布时间】:2014-05-29 16:51:32
【问题描述】:
我正在尝试解决http://www.sqlzoo.net/wiki/The_JOIN_operation上的#13
“如图所示列出每场比赛以及每支球队的进球数。这将使用“CASE WHEN”,这在之前的任何练习中都没有解释过。”
这是我的查询:
SELECT game.mdate, game.team1,
SUM(CASE WHEN goal.teamid = game.team1 THEN 1 ELSE 0 END) AS score1,
game.team2,
SUM(CASE WHEN goal.teamid = game.team2 THEN 1 ELSE 0 END) AS score2
FROM game INNER JOIN goal ON matchid = id
GROUP BY game.id
ORDER BY mdate,matchid,team1,team2
我得到“行太少”的结果。我不明白我错了哪一部分。
【问题讨论】:
-
在单独的列上,您必须具有聚合函数或将它们添加到 GROUP BY。我认为该消息是 sqlzoo 的自定义消息。
-
您错过了 0-0 的比分,因此您需要扩大连接范围以包含所有
game行,包括goal表中未列出的行。 -
你需要使用join分别获取每个团队的分数
标签: mysql sql select group-by case