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

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

challenge icon

Задание

Средне

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

  • earthquakes: location, amplitude, period

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

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

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

  • Амплитуда больше или равна 1
  • Период волн больше или равен 1 минуте

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

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

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

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

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

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

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

Потренируйтесь самостоятельно: Песочница SQL