我有一张包含游戏列表的表格,其中包含团队 ID 和游戏得分。
这是表结构。
ID HOMETEAM HOMETEAMSCORE AWAYTEAM AWAYTEAMSCORE
- 一场比赛中每支球队的得分将在各自的列中。
- 比赛未开始时,两队得分均为0。
- 比赛结束后,任何比赛都不能有0-0的比分。
我需要获得 2 个特定球队的比赛记录。例如,对于 1 队和 2 队,我需要输出为 1-3,这意味着 1 队赢了 1 队 2 队,2 队赢了 3 次队 1。
我正在使用下面的 SQL,它在某种程度上可以工作。但是对于尚未开始的游戏(得分为 0-0),我需要将输出设为 0-0。
SELECT least(homeTeam, awayTeam) team1,
greatest(homeTeam, awayTeam) team2,
sum(case when awayTeam > homeTeam
then case when homeTeamScore > awayTeamScore then 1 else 0 end else case when homeTeamScore > awayTeamScore then 0 else 1 end
end) team1Wins,
sum(case when hometeam > awayteam
then case when homeTeamScore > awayTeamScore then 1 else 0 end else case when homeTeamScore > awayTeamScore then 0 else 1 end
end) team2Wins
FROM ow_sports_games
GROUP BY least(homeTeam, awayTeam),
greatest(homeTeam, awayTeam)
除了这个之外,还有什么更好的方法来获得更好的 SQL 吗?
SQL小提琴:http ://sqlfiddle.com/#!2/10326/4/1
编辑:
一些示例数据可以更详细地解释我的要求:
HOMETEAM HOMETEAMSCORE AWAYTEAM AWAYTEAMSCORE
18 1 22 0
22 2 18 1
18 3 22 2
12 0 13 0
对于 18,22 队,输出应该是 2-1,因为 18 队有 2 胜,22 队有 1 胜
对于第 12 队和第 13 队,输出应该是 0-0,因为没有比赛结束。
输出示例来解释整体场景:
HomeTeam AwayTeam Records
18 22 2-1
22 18 1-2
12 13 0-0