Использование 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', задав псевдоним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;