me_edu
SQL: запросы с нуляШаг 21 из 35 · 0% пройдено
2. Профессиональный практикум: проект, качество и портфолио
3. Атлас программных моделей: данные, архитектура, API и тесты
Агрегаты и GROUP BY

GROUP BY и HAVING

Шаг 21 из 357 минТеория
Цель

Понять основной механизм темы «GROUP BY и HAVING» без заучивания отдельных терминов.

Как работать

Прочитайте блок один раз целиком, затем вернитесь к схеме или примеру и перескажите идею своими словами.

Критерий

Сформулированное правило, пример применения и одно ограничение метода.

PROCESS DIAGRAM1WHERE2GROUP BY3Агрегаты4HAVING
Порядок: фильтр строк → группировка → подсчёт итогов → фильтр групп
Опорная идея

GROUP BY разбивает строки на группы по значению колонки и считает агрегат отдельно для каждой группы:

SELECT city, COUNT(*) AS cnt, AVG(age) AS avg_age FROM users GROUP BY city;

Результат — по одной строке на город с подсчётами. Правило: всё, что в SELECT не агрегат, должно быть в GROUP BY.

Чтобы отфильтровать сами группы (а не строки), используют HAVING — он работает после группировки, тогда как WHERE до неё:

SELECT city, COUNT(*) AS cnt FROM users GROUP BY city HAVING COUNT(*) > 1; -- только города, где больше одного человека

Запомните разницу: WHERE фильтрует строки до группировки, HAVING — группы после. Сочетание GROUP BY и агрегатов — это, по сути, сводные таблицы средствами SQL: продажи по месяцам, заказы по клиентам, средний чек по категориям.

Назад

Обсуждение

Войдите, чтобы участвовать в обсуждении.

Пока нет сообщений.