ゲームのリストを含むテーブルがあり、チーム ID とゲームのスコアが含まれています。
これがテーブル構造です。
ID HOMETEAM HOMETEAMSCORE AWAYTEAM AWAYTEAMSCORE
- ゲームの各チームのスコアは、それぞれの列に表示されます。
- ゲームが開始されていない場合、スコアは両方のチームで 0 になります。
- ゲームが終了すると、0-0 のスコアを持つゲームはありません。
特定の 2 チームの戦績を取得する必要があります。たとえば、チーム 1 と 2 の場合、出力を 1-3 にする必要があります。これは、チーム 1 がチーム 2 に対して 1 回勝利し、チーム 2 がチーム 1 に対して 3 回勝利したことを意味します。
以下の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 の場合、チーム 18 が 2 勝、チーム 22 が 1 勝であるため、出力は 2-1 になるはずです。
チーム 12 と 13 の場合、ゲームが終了していないため、出力は 0-0 になります。
全体的なシナリオを説明する OUTPUT サンプル:
HomeTeam AwayTeam Records
18 22 2-1
22 18 1-2
12 13 0-0