АгрегатыНачальный
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;
Связанные термины
Анекдоты по теме
COUNT(*) и COUNT(col) поспорили. COUNT(*): — Я считаю всех, даже пустых. COUNT(col): — Я считаю только тех, у кого есть значение. NULL в углу: — Меня никто не считает. COUNT(col): — Именно.
— Что вернёт AVG(salary) если все зарплаты NULL? — NULL. — А SUM? — NULL. — А COUNT(salary)? — 0. COUNT считает непустые, их нет. — А COUNT(*)? — Количество строк. Это COUNT строк, не значений.
Почему агрегатные функции любят GROUP BY? Потому что без него они считают всю таблицу, а с ним — маленькие уютные группки. Как семья вместо коммуналки.