Как в SQL отфильтровать записи, где средняя заработная плата больше 50000?

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

Ответ

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

Пример запроса:

SELECT DepartmentID, AVG(Salary) AS AverageSalary
FROM Employees
GROUP BY DepartmentID
HAVING AVG(Salary) > 50000;

Объяснение:

  1. GROUP BY DepartmentID группирует сотрудников по отделам.
  2. AVG(Salary) вычисляет среднюю зарплату для каждой группы.
  3. HAVING AVG(Salary) > 50000 фильтрует результаты группировки, оставляя только те отделы, где средняя зарплата превышает 50000.

Ключевое отличие HAVING от WHERE:

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