SQLzoo JOIN教程#13

Pau*_*aul 3 mysql sql join

我一直在研究SQLzoo问题,但是在JOIN教程问题#13中的最后一个问题上遇到了问题 - 列出每个匹配的每个匹配,如图所示.

链接:http://sqlzoo.net/wiki/The_JOIN_operation

在他们提供的示例代码中,它使用了一个案例.我修改它像这样:

SELECT game.mdate, game.team1,
  CASE WHEN goal.teamid=game.team1 THEN 1 ELSE 0 END score1, game.team2,
  CASE WHEN goal.teamid=game.team2 THEN 1 ELSE 0 END score2
  FROM game, goal WHERE game.id=goal.matchid
GROUP BY game.mdate, goal.matchid, game.team1, game.team2
Run Code Online (Sandbox Code Playgroud)

他们建议在score1/score2上使用SUM函数将提供答案.我对如何在SQL中创建的这两列使用SUM函数感到困惑.

任何人都可以提供一个关于如何做或提到如何以更好的方式编写此SQL查询的提示?

小智 12

这对我有用,可以修正左连接.

SELECT mdate, team1,
SUM(CASE WHEN teamid = team1 THEN 1 ELSE 0 END) score1,
team2,
SUM(CASE WHEN teamid = team2 THEN 1 ELSE 0 END) score2
FROM game LEFT JOIN goal ON matchid = id GROUP BY mdate, matchid, team1, team2
Run Code Online (Sandbox Code Playgroud)


Mar*_*det 5

你的 SQL 非常好,你只需要一个SUM聚合函数的好例子。
这是我的解决方案:

 SELECT mdate,
 team1, SUM(CASE game.team1 WHEN goal.teamid THEN 1 ELSE 0 END) 'score1',
 team2, SUM(CASE game.team2 WHEN goal.teamid THEN 1 ELSE 0 END) 'score2'
 FROM game LEFT JOIN goal ON game.id=goal.matchid
 GROUP BY game.id
 ORDER BY mdate, matchid, team1, team2
Run Code Online (Sandbox Code Playgroud)

注意:我原来的帖子给出了错误的值,需要使用LEFT JOIN而不是INNER JOIN. 左连接处理两队得分均为 0 时的情况,内连接不会处理这些情况。