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

AЗапрос выполнится, и name будет первым значением из каждой группы по dept в алфавитном порядке
BЗапрос выполнится, но name будет случайным значением из каждой группы dept без гарантий стабильности
CЗапрос завершится ошибкой: name не входит в GROUP BY и не обёрнут агрегатной функцией вроде MAX
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разбор после ответа
Что делает оператор HAVING в SQL-запросе с группировкой?
Тренировать SQL в Telegram

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