В SELECT определена колонка CASE WHEN years_exp < 1 THEN 'Junior' WHEN years_exp < 5 THEN 'Middle' ELSE 'Senior' END AS level. Как корректно сгруппировать по этому выражению в PostgreSQL?
AОбязательно повторить полное выражение
CASE WHEN в GROUP BY, так как псевдонимы из SELECT запрещены в GROUP BYBВ PostgreSQL допустимо написать
GROUP BY level: псевдоним из SELECT разрешён в GROUP BY как расширение стандартаCПеренести выражение
CASE WHEN в WHERE и группировать по результату фильтрации без повторного использования псевдонимаDЗаменить
GROUP BY на HAVING level = 'Junior', чтобы группировка работала с условными выражениями CASE WHENПравильный ответ. PostgreSQL разрешает использовать псевдонимы из
SELECT в GROUP BY — можно написать GROUP BY level.Разбор
По стандарту SQL псевдоним из SELECT недоступен в GROUP BY, но PostgreSQL расширяет стандарт и позволяет это. Можно написать GROUP BY level, GROUP BY 1 (порядковый номер колонки) или повторить выражение CASE WHEN целиком. Самый читаемый вариант — использовать псевдоним. WHERE фильтрует строки до агрегации и не заменяет группировку, а HAVING отбирает уже сгруппированные строки и тоже не годится вместо GROUP BY.
Проверь себя · 1/3разбор после ответа
Что вернёт запрос
SELECT AVG(salary) FROM employees;?Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»
- Что делает оператор `DISTINCT` в `SELECT`-запросе?
- Что делает оператор `HAVING` в SQL-запросе с группировкой?
- Есть таблица `orders(user_id, amount)`. Какой запрос посчитает сумму всех заказов по каждому пользователю?
- Нужно посчитать сумму оплаченных заказов по каждому пользователю. В таблице `orders` есть поля `user_id`, `amount`, `status`. Какой запрос корректен и наиболее эффективен?
- В таблице пользователей есть колонка `middle_name`, в которой часто хранится `NULL`. Что вернёт выражение `COUNT(middle_name)`?
- Все вопросы по «Агрегация, GROUP BY и HAVING» →