Выбор ответа Junior GROUP BY и агрегаты спрашивают часто обновлено
Агрегат в WHERE
Вопрос
Нужно вывести клиентов, у которых больше 5 заказов. Что произойдёт с этим запросом?
SELECT customer_id, COUNT(*)
FROM orders
WHERE COUNT(*) > 5
GROUP BY customer_id;
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ошибка: агрегат нельзя в WHERE, нужно HAVING COUNT() 5. WHERE выполняется до группировки, групп и их размеров на этом шаге ещё нет, поэтому PostgreSQL выдаст ошибку «aggregate functions are not allowed in WHERE».
Варианты ответа
- Запрос вернёт верный результат: WHERE увидит итог группировки
- Запрос вернёт всех клиентов: условие проверяется до группировки
- Ошибка: COUNT(*) нельзя использовать вместе с GROUP BY
- Ошибка: агрегат нельзя в WHERE, нужно HAVING COUNT(*) > 5правильный ответ
Разбор
WHERE выполняется до группировки, групп и их размеров на этом шаге ещё нет, поэтому PostgreSQL выдаст ошибку «aggregate functions are not allowed in WHERE». Фильтр по агрегату пишется в HAVING. Молча вернуть всех клиентов база не может, она отклонит запрос на этапе разбора. COUNT(*) с GROUP BY, конечно, совместим.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.