Для чего используется оператор HAVING в SQL?

«Для чего используется оператор HAVING в SQL?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Оператор HAVING используется для фильтрации результатов агрегации, сгруппированных оператором GROUP BY. В отличие от WHERE, который фильтрует строки до группировки, HAVING применяется после неё и может использовать агрегатные функции.

Пример: Выбрать отделы с более чем 5 сотрудниками.

SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;

Ключевые отличия от WHERE:

  1. Порядок выполнения: WHEREGROUP BYHAVING.
  2. Контекст: HAVING работает с агрегированными значениями (результатами COUNT, SUM, AVG), а WHERE — с отдельными строками таблицы.
  3. Совместное использование: Их можно комбинировать в одном запросе.

Пример с WHERE и HAVING: Найти среднюю зарплату по отделам для сотрудников, нанятых после 2020 года, где средняя зарплата превышает 50 000.

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