Нужно получить количество заказов по паре (user_id, status) из таблицы orders. Какой запрос верный?

ASELECT user_id, status, COUNT(*) FROM orders GROUP BY user_id;
BSELECT user_id, status, COUNT(*) FROM orders GROUP BY user_id, status;
CSELECT user_id, status, COUNT(*) FROM orders GROUP BY status, COUNT(*);
DSELECT 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. Какой запрос корректен?
Тренировать SQL в Telegram

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