回答

收藏

SQLzoo JOIN教程#13

技术问答 技术问答 206 人阅读 | 0 人回复 | 2023-09-13

我一直在研究SQLzoo问题,但在JOIN教程问题#13中的最后一个问题遇到了麻烦-如图所示,列出每场比赛和每队得分的目标。4 a+ ~3 {$ H$ M6 E
链接:http://sqlzoo.net/wiki/The_JOIN_operation6 F% x& K5 R; R7 G" m' \4 w
在他们给出的示例代码中,它使用了一个案例。我这样修改它:
$ Q0 l+ v' z# ySELECT 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.matchidGROUP BY game.mdate,goal.matchid,game.team1,game.team2他们建议在score1 / score2上使用SUM函数将提供答案。关于如何SQL使用这两列内部创建的列SUM函数,我感到困惑。
5 {. U& S/ I. M% V- u3 @. I任何人都可以提供如何执行或广泛提及如何以更好的方式写作SQL查询提示?# f$ `- W3 r: d# T$ G* r  F, a
                                                                , G9 N& X5 N" M& }
    解决方案:                                                                $ q+ X, q) N* t$ |& L( P! ]* I
                                                                你真的需要它SUM这些列(这SUM这就是为什么聚合函数GROUPBY在那里使用)。为了更好地编写查询,您需要丢失旧的隐藏式JOIN并使用风格ANSI显式样式:
: S0 N0 a5 |/ |" qSELECT  game.mdate,        game.team        SUM(CASE WHEN goal.teamid=game.team1 THEN 1 ELSE 0 END) score         game.team二、        SUM(CASE WHEN goal.teamid=game.team2 THEN 1 ELSE 0 END) score2FROM gameINNER JOIN goal     ON game.id=goal.matchidGROUP BY game.mdate,goal.matchid,game.team1,game.team2 2
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则