Заметки бизнес-аналитика
Главная › Системный анализ › Данные и SQL

HAVING в SQL: как фильтровать группы после GROUP BY

Конспект статьи. Автор оригинала: Анастасия Саврова (Skillfactory)

WHERE отбирает строки до группировки, HAVING проверяет результаты агрегации.

Порядок

GROUP BY собирает группы → агрегатные функции считают значения → HAVING оставляет подходящие группы. Порядок конструкций: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY.

SELECT city, AVG(price) AS avg_price
FROM hotels
WHERE is_active = TRUE
GROUP BY city
HAVING AVG(price) > 5000;

Приёмы

  • COUNT(*) считает все строки, COUNT(столбец) пропускает NULL.
  • Агрегат в WHERE — ошибка: групп ещё нет.
  • Условия комбинируются через AND, OR, NOT, BETWEEN.
  • При группировке по нескольким столбцам группа — это сочетание их значений.
-- клиенты, у которых больше одного доставленного заказа
SELECT customer_id, COUNT(delivery_date) AS delivered_cnt
FROM orders
GROUP BY customer_id
HAVING COUNT(delivery_date) > 1;
Источник: HAVING в SQL: как фильтровать группы после GROUP BY
Автор: Анастасия Саврова (Skillfactory)
Это конспект, пересказ основных идей. Полный текст, иллюстрации и примеры читайте в оригинальной статье.