对于我的一个体育相关项目,我需要显示团队的记录计数。
示例:"球队 1"和"球队 2"已经打了 5 场比赛。"Team 1"赢了3次,"Team 2"赢了2次。所以输出应该是 (3-2)。
下面是包含一些数据的表结构。
ID ---- TEAM1 ---- SCORE1 ---- TEAM2 ---- SCORE2
1 70 1 73 2
2 74 0 70 1
3 74 2 73 1
4 73 1 70 0
输出应如下所示:
TEAM1 ---- TEAM2---- RECORD
70 73 2-0
74 70 0-1
74 73 1-0
注意:
- 总会有赢家,没有一场比赛可以平局。
- 在输出中,团队 1 和团队 2 的组合应该是唯一的。
SQL 小提琴 : http://sqlfiddle.com/#!2/4dead/1/0
这里的棘手问题是处理在主客场比赛中的同一支球队。这可以通过(很多)案例陈述来解决。
基本方法是重新设置数据的格式,以便首先显示 id 最低的团队。
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
games
group by
least(homeTeam, awayTeam),
greatest(homeTeam, awayTeam);
SQL 小提琴
或者稍微紧凑一些,但可能更难理解:
select
least(homeTeam, awayTeam) team1,
greatest(homeTeam, awayTeam) team2,
sum(case sign(awayTeam - homeTeam)
when sign(homeTeamScore - awayTeamScore) then 1
else 0 end) team1Wins,
sum(case sign(awayTeam - homeTeam)
when sign(awayTeamScore - homeTeamScore) then 1
else 0 end) team2Wins
from
games
group by
least(homeTeam, awayTeam),
greatest(homeTeam, awayTeam);
SQL 小提琴