Есть таблица orders(user_id, amount). Какой запрос посчитает сумму всех заказов по каждому пользователю?

ASELECT user_id, SUM(amount) FROM orders;: агрегат по всей таблице без разбивки по столбцу user_id
BSELECT user_id, amount FROM orders GROUP BY user_id, amount;: группировка по двум столбцам без агрегата выручки
CSELECT SUM(user_id), amount FROM orders GROUP BY amount;: сумма идентификаторов в разрезе значения суммы заказа
DSELECT user_id, SUM(amount) FROM orders GROUP BY user_id;: сумма заказов по каждому пользователю отдельно
Правильный ответ. Для агрегатов по группам нужно явно указывать неагрегированные колонки в GROUP BY.

Разбор

При использовании агрегатных функций и обычных колонок в SELECT все неагрегированные колонки должны быть перечислены в GROUP BY. Для суммы по пользователю используем запрос SELECT user_id, SUM(amount) FROM orders GROUP BY user_id;. Без GROUP BY сумма посчитается по всей таблице, а группировка по amount не даст разбивки по пользователю.

Проверь себя · 1/3разбор после ответа
Что делает оператор HAVING в SQL-запросе с группировкой?
Тренировать SQL в Telegram

Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»