Запрос: 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 в столбце группировки?Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»
- Что делает оператор `DISTINCT`?
- Что делает `HAVING`?
- Есть таблица `orders(user_id, amount)`. Какой запрос посчитает сумму всех заказов по каждому пользователю?
- Нужно посчитать сумму оплаченных заказов по каждому пользователю. В таблице `orders` есть поля `user_id`, `amount`, `status`. Какой запрос корректен и наиболее эффективен?
- В таблице `users` есть колонка `middle_name`, в которой часто хранится `NULL`. Что вернёт выражение `COUNT(middle_name)`?
- Все вопросы по «Агрегация, GROUP BY и HAVING» →