Ответ
Что хотят услышать интервьюеры
Интервьюеры ожидают от кандидата четкого понимания разницы между операторами WHERE и HAVING в SQL, а также их применения в контексте агрегации данных. Кандидат должен продемонстрировать знания о том, как и когда использовать каждый из этих операторов, и объяснить, почему HAVING необходим после GROUP BY.
Различия между WHERE и HAVING
WHERE:
- Применяется для фильтрации строк до выполнения агрегации.
- Не может использовать агрегатные функции (например, SUM, COUNT) в своем условии.
- Работает на уровне строк.
HAVING:
- Применяется для фильтрации результатов после выполнения агрегации.
- Может использовать агрегатные функции в своих условиях.
- Работает на уровне сгруппированных данных.
Пример использования
SELECT department, COUNT(*) AS employee_count
FROM employees
WHERE salary > 50000 -- Фильтруем строки до агрегации
GROUP BY department
HAVING COUNT(*) > 10; -- Фильтруем сгруппированные данныеВ этом примере:
- WHERE salary > 50000: фильтрует сотрудников с зарплатой выше 50,000 до группировки.
- HAVING COUNT(*) > 10: возвращает только те отделы, где количество сотрудников больше 10 после группировки.
Использование HAVING после GROUP BY позволяет нам фильтровать результаты, основываясь на агрегатных данных, что невозможно с помощью WHERE. Это критически важно, когда нужно анализировать агрегированные результаты.
Что могут спросить дальше
- Объяснить, как работает GROUP BY
- Привести примеры использования HAVING с различными агрегатными функциями
- Показать, как данные фильтруются при использовании только WHERE
- Сравнить производительность WHERE и HAVING