Вступить в клуб →
средняявопросSQL и проверка данных

Запрос с агрегатом в 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 фильтр по статусу
  • Запрос корректен, но вернёт также пользователей ровно с тремя заказами

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела