Нужно получить количество заказов по паре (user_id, status) из таблицы orders. Какой запрос верный?
A
SELECT user_id, status, COUNT(*) FROM orders GROUP BY user_id;B
SELECT user_id, status, COUNT(*) FROM orders GROUP BY user_id, status;C
SELECT user_id, status, COUNT(*) FROM orders GROUP BY status, COUNT(*);D
SELECT user_id, status, COUNT(*) FROM orders GROUP BY 1;Правильный ответ. При группировке по нескольким полям все поля без агрегата должны быть перечислены в
GROUP BY.Разбор
Чтобы посчитать количество строк по комбинации значений, нужно указать все поля комбинации в GROUP BY. Запрос SELECT user_id, status, COUNT(*) FROM orders GROUP BY user_id, status; корректен. Если в GROUP BY указать только user_id, СУБД пожалуется на status как на не-агрегированное поле. Если попытаться сгруппировать по COUNT(*), синтаксис вообще невалиден. Запись GROUP BY 1 группирует только по первому полю и не даёт разрез по status.
Проверь себя · 1/3разбор после ответа
Вы хотите вывести только те категории товаров, где суммарные продажи больше 10000. Таблица
sales с колонками category и amount. Какой запрос корректен?Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»
- Что делает оператор `DISTINCT` в `SELECT`-запросе?
- Что делает оператор `HAVING` в SQL-запросе с группировкой?
- Есть таблица `orders(user_id, amount)`. Какой запрос посчитает сумму всех заказов по каждому пользователю?
- Нужно посчитать сумму оплаченных заказов по каждому пользователю. В таблице `orders` есть поля `user_id`, `amount`, `status`. Какой запрос корректен и наиболее эффективен?
- В таблице пользователей есть колонка `middle_name`, в которой часто хранится `NULL`. Что вернёт выражение `COUNT(middle_name)`?
- Все вопросы по «Агрегация, GROUP BY и HAVING» →