使用 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;