Menu
Coddy logo textTech

Группировка. Часть 2

Часть раздела Основы путешествия по SQL на Coddy — урок 37 из 72.

Ключевое слово WHERE проверяет условие для каждой записи по отдельности. Например:

SELECT * FROM table1
WHERE col1 > col2

Условие col1 > col2 будет выполняться для каждой записи, проверяя, соблюдено ли оно.

Но что, если мы хотим отфильтровать агрегированные результаты? Например:

SELECT category, AVG(price) FROM table1
WHERE AVG(price) > 40
GROUP BY category

Это не сработает, потому что WHERE не может проверять агрегатные функции. Для этого существует ключевое слово HAVING. Оно фильтрует данные по условию агрегации.

SELECT category, AVG(price) FROM table1
GROUP BY category
HAVING AVG(price) > 40

Это отфильтрует все категории, для которых средняя цена больше 40.

Если мы хотим объединить HAVING и WHERE, мы напишем:

SELECT category, AVG(price) FROM table1
WHERE price > 25
GROUP BY category
HAVING AVG(price) > 40

Сначала запрос пройдет запись за записью и отфильтрует все записи, для которых price больше 25, и только после этого выполнит предложение GROUP BY и отфильтрует каждую category, для которой средняя price больше 40.

challenge icon

Задание

Средне

Доступные таблицы и столбцы:

  • <strong>earthquakes</strong>: <strong>location</strong>, <strong>amplitude</strong>, <strong>period</strong>

Шкала Рихтера — это логарифмическая шкала, используемая для измерения магнитуды землетрясений.

Нам нужно вернуть среднюю магнитуду для каждого location всех крупных землетрясений

Крупное землетрясение определяется следующим образом:

  • amplitude больше или равна 1
  • period волн больше или равен 1 минуте

Для этого челенджа мы будем использовать следующую формулу: M = (A/T)<sup>2</sup> / T, что эквивалентно M = ((A/T)*(A/T)) / T.

Верните location и среднюю магнитуду каждого location, учитывая только крупные землетрясения (назовите столбец avg_magnitude). Включите в результат только те location, где avg_magnitude больше 1

Округлите результаты до 2 знаков после запятой

Попробуйте сами

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы