CASE と AVG を使って割合を計算
CASE 式は、THEN 句で指定した任意の値を返すことができます。これを集約関数と組み合わせることで、複雑な計算やデータの加工を柔軟に行えます。特に便利な使い方として、AVG 関数の中で CASE 式を使い、特定のデータ割合を計算する方法があります。
基本的な構文の例は次のとおりです:
AVG(CASE WHEN condition_is_met THEN 1
WHEN condition_is_not_met THEN 0 END)
この方法で計算する場合、どのレコードを 0 とカウントするかを正確に指定することが重要です。指定が不正確だと、正しい計算結果を得られない場合があります。
ここでは、各国の勝ち・負け・引き分けの数を調べましょう。matches テーブルは、2013/2014 シーズンと 2014/2015 シーズンの試合データに絞り込まれています。
この演習はコースの一部です
SQL のデータ操作
演習の手順
AVG()関数の中の、CASE式を完成させてください。m.home_goalがm.away_goalに等しくない場合を条件とし、この条件を満たす場合は0を返すようにします。- このプロセスを繰り返し、
'2014/2015'シーズンのホームの得点とアウェイの得点を比較し、ties_2014_2015というエイリアスを付けてください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
SELECT
c.name AS country,
-- Calculate the fraction of tied games in each season
___(___ ___ m.season='2013/2014' AND m.home_goal = m.away_goal THEN 1
WHEN m.season='2013/2014' AND m.home_goal ___ m.away_goal THEN ___
END) AS ties_2013_2014,
___(___ ___ m.season='2014/2015' ___ ___ = ___ ___ ___
WHEN m.season='2014/2015' ___ m.home_goal != m.away_goal THEN ___
___) AS ___
FROM country AS c
LEFT JOIN matches AS m
ON c.id = m.country_id
GROUP BY country;