Основное отличие использования HAVING и WHERE при фильтрации данных в PostgreSQL заключается в том, что WHERE сначала выбирает строки, а затем группирует их и вычисляет агрегатные функции, тогда как HAVING отбирает строки групп после группировки и вычисления агрегатных функций. 1
Таким образом, WHERE используется для фильтрации отдельных строк перед группировкой, а HAVING — для фильтрации сгруппированных данных. 4
Кроме того, предложение WHERE не должно содержать агрегатных функций, а предложение HAVING, напротив, всегда содержит агрегатные функции. 1
Выбор между WHERE и HAVING зависит от конкретных требований запроса: WHERE применяется, когда нужно отфильтровать строки до любых агрегатных вычислений, а HAVING — когда нужно отфильтровать результаты после выполнения агрегации. 2