始める無料で始める

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_goalm.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;
コードを編集して実行