Запрос: SELECT dept, name, MAX(salary) FROM employees GROUP BY dept. Что произойдёт в PostgreSQL?

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

Разбор

Стандарт SQL и PostgreSQL требуют, чтобы в SELECT-списке GROUP BY-запроса присутствовали только столбцы из GROUP BY, агрегатные функции или выражения, функционально зависимые от ключа группировки. name не в GROUP BY dept, поэтому PostgreSQL выдаст ошибку. MySQL в режиме без ONLY_FULL_GROUP_BY допустит запрос, но вернёт произвольное значение — недетерминированный результат.

Проверь себя · 1/3разбор после ответа
Как GROUP BY обрабатывает значения NULL в столбце группировки?
Тренировать SQL в Telegram

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