Есть таблица orders(user_id, amount). Какой запрос посчитает сумму всех заказов по каждому пользователю?
A
SELECT user_id, SUM(amount) FROM orders;: агрегат по всей таблице без разбивки по столбцу user_idB
SELECT user_id, amount FROM orders GROUP BY user_id, amount;: группировка по двум столбцам без агрегата выручкиC
SELECT SUM(user_id), amount FROM orders GROUP BY amount;: сумма идентификаторов в разрезе значения суммы заказаD
SELECT 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-запросе с группировкой?Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»
- Что делает оператор `DISTINCT` в `SELECT`-запросе?
- Что делает оператор `HAVING` в SQL-запросе с группировкой?
- Нужно посчитать сумму оплаченных заказов по каждому пользователю. В таблице `orders` есть поля `user_id`, `amount`, `status`. Какой запрос корректен и наиболее эффективен?
- В таблице пользователей есть колонка `middle_name`, в которой часто хранится `NULL`. Что вернёт выражение `COUNT(middle_name)`?
- Нужно получить количество заказов по паре (`user_id`, `status`) из таблицы `orders`. Какой запрос верный?
- Все вопросы по «Агрегация, GROUP BY и HAVING» →