Что произойдёт в СУБД, строго следующей стандарту SQL, при выполнении запроса SELECT user_id, created_at, COUNT(*) FROM orders GROUP BY user_id;?

AЗапрос выполнится без ошибок, и значение created_at будет произвольно выбрано из строк группы пользователя
BЗапрос завершится ошибкой: created_at должен быть в GROUP BY или внутри агрегатной функции по стандарту SQL
CБудет автоматически добавлен GROUP BY user_id, created_at, и группировка пройдёт по всей паре столбцов разом
DЗначение created_at во всех итоговых строках будет заменено на NULL, чтобы сделать запрос валидным
Правильный ответ. Все неагрегированные колонки из SELECT должны входить в GROUP BY.

Разбор

В стандартном SQL любая колонка, указанная в списке SELECT и не обёрнутая агрегатной функцией (COUNT, SUM и т.д.), должна быть перечислена в GROUP BY. Иначе запрос считается некорректным и завершается ошибкой. Некоторые СУБД (например, MySQL в нестрогом режиме) могут вернуть произвольное значение из группы, но это нестандартное поведение. Автоматическое добавление колонок в GROUP BY или замена на NULL стандартом не предусмотрены.

Проверь себя · 1/3разбор после ответа
Есть таблица payments(amount), в части строк amount равно NULL. Какой запрос посчитает количество всех строк в таблице, включая строки с NULL в столбце amount?
Тренировать SQL в Telegram

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