НачатьНачать бесплатно

Использование 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;
Редактировать и запускать код