Вопрос проверяет понимание ограничений использования агрегатных функций в SQL.
Нет, агрегатные функции (как SUM, COUNT, AVG) нельзя использовать напрямую в условии WHERE. Вместо этого нужно использовать HAVING для фильтрации результатов агрегации. WHERE фильтрует строки до агрегации, а HAVING — после.
В SQL существует важное различие между WHERE и HAVING при работе с агрегатными функциями.
Почему нельзя в WHERE:
WHERE выполняется до группировки и агрегации
Агрегатные функции работают с группами строк, а не с отдельными строками
Правильный подход:
-- Неправильно (вызовет ошибку):
SELECT department, AVG(salary)
FROM employees
WHERE AVG(salary) > 50000
GROUP BY department;
-- Правильно (используем HAVING):
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;Разница между WHERE и HAVING:
WHERE: фильтрует отдельные строки до группировки
HAVING: фильтрует группы строк после группировки
Пример с обоими условиями:
SELECT department, AVG(salary)
FROM employees
WHERE salary > 30000 -- Фильтр отдельных строк
GROUP BY department
HAVING AVG(salary) > 50000; -- Фильтр групп