Фильтрация групп (предложение HAVING)
В самом общем смысле, предложение HAVING работает аналогично предложению WHERE, но применяется к группам. WHERE накладывает ограничения на строки, a HAVING — на группы. Т.е. сначала GROUP BY разделяет строки на наборы (по типу), затем на полученные группы накладываются условия предложения HAVING.
Если в списке выбора имеются агрегирующие функции, предложение WHERE выполняется перед ними, тогда как предложение HAVING применяется ко всему запросу в целом, после вычисления значений функций и разбиения на группы.
С точки зрения синтаксиса условного выражения, предложения HAVING и WHERE идентичны, отличие состоит лишь в том, что в условии предложения WHERE не могут находиться агрегирующие функции. Кроме того, элементы предложения HAVING быть перечислены в списке выбора.
Если в предложении HAVING есть несколько условий, они объединяются с помощью операторов AND, OR и NOT.SQL:
SELECT region, COUNT(*)
FROM tbl_clients
GROUP BY region
HAVING COUNT(*)>50
Результат:
region | COUNT(*) |
Los Angeles | 99 |
Seattle | 77 |