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

Фильтр по сумме покупок перенесли из HAVING в WHERE

Нужен список клиентов, у которых суммарные покупки за 2025 год превысили 10000.

SELECT client_id, SUM(amount) AS total
FROM purchases
WHERE dt >= '2025-01-01'
GROUP BY client_id
HAVING SUM(amount) > 10000

Коллега говорит, что HAVING тормозит, и переписывает запрос так:

SELECT client_id, SUM(amount) AS total
FROM purchases
WHERE dt >= '2025-01-01' AND amount > 10000
GROUP BY client_id

Чем результат второго запроса отличается от первого?

  • Результат получится тот же самый, но запрос выполнится быстрее: фильтр применяется до группировки, а не после неё
  • Останутся клиенты хотя бы с одной крупной покупкой, а total будет считаться только по таким покупкам
  • Запрос вернёт те же строки, но total окажется меньше ровно на 10000 у каждого клиента
  • Запрос завершится с ошибкой: в WHERE нельзя ссылаться на поле, по которому дальше идёт агрегация в SELECT

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

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

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

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