SQL
January 12, 2022
SQL: различие между операторами HAVING и WHERE
'WHERE'
: сначала выбирает строки -> группирует строки-> вычисляет агрегатные функции.
То есть, грубо говоря, с помощью 'WHERE'
мы выбираем строки для вычисления агрегатов
'HAVING'
: сначала группирует строки -> вычисляет агрегатные функции -> выбирает строки.
HAVING
используется для фильтрации результатаGROUP BY
по заданным логическим условиям
- не должно содержать агрегатных функций
- не имеет смысла использовать агрегатные функции для определения строк для вычисления агрегатных функций
В то же время 'HAVING'
можно написать без агрегатов, но скорее всего это будет бесполезно. То же самое условие может быть более эффективным на стадии 'WHERE'
.