Обчислення часток за допомогою CASE та AVG
Вирази CASE повертають будь-яке значення, яке ви вкажете в клаузі THEN. Це надзвичайно потужний інструмент для точних обчислень і маніпулювання даними, особливо разом із агрегувальними функціями. Одна з ключових технік — використовувати CASE всередині функції AVG, щоб обчислити частку записів у вашій базі даних.
Ось приклад такої побудови:
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', заалiasіть як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;