← Все вопросы

Зачем нужен GROUP BY и как он работает с агрегатами?

Задан 8 месяцев назад761 просмотров2 ответа
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

Группирует строки и считает агрегат по каждой группе отдельно.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект