Как происходит фильтрация агрегированных данных в SQL?

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

Ответ

В SQL фильтрация агрегированных данных выполняется с помощью оператора HAVING. Ключевое отличие от WHERE в том, что WHERE фильтрует строки до агрегации, а HAVINGпосле.

Пример:

-- Найти отделы, где средняя зарплата превышает 50000
SELECT department_id, AVG(salary) as avg_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 50000;

Порядок выполнения:

  1. FROM / JOIN — выбор таблиц.
  2. WHERE — фильтрация строк (если нужно).
  3. GROUP BY — группировка.
  4. Агрегатные функции (SUM, AVG, COUNT) — вычисление по группам.
  5. HAVING — фильтрация по результату агрегации.
  6. SELECT — выбор полей.
  7. ORDER BY / LIMIT — сортировка и ограничение.

Важно: В условии HAVING можно использовать как агрегатные функции (SUM(amount) > 100), так и обычные поля из GROUP BY (department_id = 5).