Работает ли SQL WHERE с агрегатными функциями

«Работает ли SQL WHERE с агрегатными функциями» — вопрос из категории Базы данных, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, WHERE не работает напрямую с агрегатными функциями (SUM, COUNT, AVG и т.д.). Для фильтрации по агрегатным функциям нужно использовать HAVING после GROUP BY.

Пример:

SELECT department, AVG(salary) 
FROM employees 
GROUP BY department 
HAVING AVG(salary) > 50000;

Разница:

  • WHERE фильтрует строки до группировки
  • HAVING фильтрует после группировки и агрегации

Можно использовать оба в одном запросе:

SELECT department, AVG(salary) 
FROM employees 
WHERE hire_date > '2020-01-01'
GROUP BY department 
HAVING AVG(salary) > 50000;