АгрегатыНачальный
GROUP BY
Группирует строки с одинаковыми значениями для применения агрегатных функций.
Синтаксис
SELECT col, AGG(col2) FROM table GROUP BY col;
Объяснение
GROUP BY схлопывает группы строк в одну. В SELECT можно использовать только колонки из GROUP BY или агрегатные функции.
Порядок: WHERE (фильтр строк) → GROUP BY (группировка) → HAVING (фильтр групп) → SELECT.
Пример
-- Количество заказов и сумма по каждому пользователю SELECT user_id, COUNT(*) AS orders_count, SUM(total) AS total_spent FROM orders GROUP BY user_id ORDER BY total_spent DESC;
Связанные термины
Анекдоты по теме
— Чем HAVING отличается от WHERE? — WHERE фильтрует строки ДО группировки. HAVING — ПОСЛЕ. — Как охранник на входе и на выходе? — Именно. И оба нужны.
COUNT(*) и COUNT(col) поспорили. COUNT(*): — Я считаю всех, даже пустых. COUNT(col): — Я считаю только тех, у кого есть значение. NULL в углу: — Меня никто не считает. COUNT(col): — Именно.
— Почему новички путают HAVING и WHERE? — Потому что оба фильтруют. Но WHERE — до группировки, а HAVING — после. Как досмотр в аэропорту: сначала смотрят всех (WHERE), потом только прошедших (GROUP BY), а потом ещё раз проверяют группы (HAVING).