Запрос с агрегатом в WHERE не выполняется: как правильно отобрать пользователей по числу заказов
Нужно найти пользователей, у которых больше трёх неоплаченных заказов. Написан запрос:
SELECT user_id, count(*) AS cnt
FROM orders
WHERE status = 'unpaid' AND count(*) > 3
GROUP BY user_id;
База возвращает ошибку.
Как починить запрос?
- Добавить count(*) в список GROUP BY: тогда база разрешит использовать агрегат в условии WHERE
- Заменить count(*) на count(id): агрегат в WHERE допустим только с именем колонки
- Перенести условие на агрегат в HAVING, оставив в WHERE фильтр по статусу
- Запрос корректен, но вернёт также пользователей ровно с тремя заказами
