← Все вопросы
Зачем нужен GROUP BY и как он работает с агрегатами?
14
Не до конца понимаю GROUP BY. Если я хочу узнать сумму заказов по каждому пользователю — как это пишется и почему просто SUM без группировки не годится?
2 ответа
20
✓ Принятый ответ — помог автору
GROUP BY собирает строки в группы по одинаковому значению, а агрегат (SUM, COUNT, AVG...) считается ОТДЕЛЬНО внутри каждой группы.
SELECT user_id, SUM(amount) AS total
FROM orders
GROUP BY user_id;
Это даст по строке на каждого пользователя с его суммой. Без GROUP BY SUM(amount) свернул бы всю таблицу в одно число — общую сумму по всем.
Важное правило: всё, что в SELECT НЕ обёрнуто в агрегат, обязано быть в GROUP BY. Иначе СУБД не знает, какое из значений группы показать (и выдаст ошибку или мусор).
Константин Ермаков вот про «не агрегат → в GROUP BY» меня и спасло, постоянно на этом падал · 8 месяцев назад
6
Группирует строки и считает агрегат по каждой группе отдельно.
Ваш ответ
Войдите, чтобы ответить на вопрос.