SQL
January 12, 2022

SQL: различие между операторами HAVING и WHERE

'WHERE': сначала выбирает строки -> группирует строки-> вычисляет агрегатные функции.

То есть, грубо говоря, с помощью 'WHERE' мы выбираем строки для вычисления агрегатов

'HAVING': сначала группирует строки -> вычисляет агрегатные функции -> выбирает строки.

HAVING используется для фильтрации результата GROUP BY по заданным логическим условиям

Вывод:

'WHERE':

  • не должно содержать агрегатных функций
  • не имеет смысла использовать агрегатные функции для определения строк для вычисления агрегатных функций

'HAVING':

  • всегда содержит агрегатные функции

В то же время 'HAVING' можно написать без агрегатов, но скорее всего это будет бесполезно. То же самое условие может быть более эффективным на стадии 'WHERE'.