В чем разница между HAVING и WHERE в SQL

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

Ответ

WHERE фильтрует строки до группировки (GROUP BY), а HAVINGпосле.

Пример:

-- WHERE: фильтрация до группировки
SELECT department, AVG(salary) 
FROM employees 
WHERE salary > 50000 
GROUP BY department;

-- HAVING: фильтрация после группировки (по агрегатной функции)
SELECT department, AVG(salary) 
FROM employees 
GROUP BY department 
HAVING AVG(salary) > 75000;

Ключевое:

  • WHERE работает с отдельными строками, HAVING — с группами.
  • HAVING может использовать агрегатные функции (SUM, AVG и т.д.), WHERE — нет.
  • Порядок: WHEREGROUP BYHAVING.