ウィンドウ関数を追加する
素晴らしいです!試合日、ホームチーム、アウェイチーム、そして各チームの得点を取得する結果セットが完成しました。残る最後の要素は、各試合でマンチェスター・ユナイテッドは、どれほどの大敗を喫したか という点です。
これを調べるためには、メインクエリにウィンドウ関数を追加し、home_goal と away_goal の差の絶対値を使って試合をランク付けします。こうすることで、マンチェスター・ユナイテッドがホームとアウェイのどちらでプレーしたのかを気にせずに、試合の得点差を直接比較できます。
計算式はすでに完成しています。あとはウィンドウ関数を正しく完成させるだけです!
この演習はコースの一部です
SQL のデータ操作
演習の手順
- ホームチームとアウェイチームそれぞれの、チーム名・ID・得点が対応するように CTE を設定してください。
- メインクエリで、
date、home team name、away team name、home goals、away goalsを選択してください。 - 得点差を基に、試合をランク付けし降順に並べ替えてください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
-- Set up the home team CTE
___ ___ ___ (
SELECT m.id, t.team_long_name,
CASE WHEN m.home_goal > m.away_goal THEN 'MU Win'
WHEN m.home_goal < m.away_goal THEN 'MU Loss'
ELSE 'Tie' END AS outcome
FROM match AS m
LEFT JOIN team AS t ON m.hometeam_id = t.team_api_id),
-- Set up the away team CTE
___ ___ (
SELECT m.id, t.team_long_name,
CASE WHEN m.home_goal > m.away_goal THEN 'MU Loss'
WHEN m.home_goal < m.away_goal THEN 'MU Win'
ELSE 'Tie' END AS outcome
FROM match AS m
LEFT JOIN team AS t ON m.awayteam_id = t.team_api_id)
-- Select columns and and rank the matches by goal difference
SELECT DISTINCT
___,
___.___ AS home_team,
___.___ AS away_team,
m.home_goal, m.away_goal,
___() ___(___ ___ ABS(home_goal - away_goal) ___) as match_rank
-- Join the CTEs onto the match table
FROM match AS m
___ JOIN ___ ON m.id = ___
___ JOIN ___ ON m.id = ___
WHERE m.season = '2014/2015'
AND ((home.team_long_name = 'Manchester United' AND home.outcome = 'MU Loss')
OR (away.team_long_name = 'Manchester United' AND away.outcome = 'MU Loss'));