Фильтрация групп (предложение HAVING)

В дополнение к способности группировать данные с помощью предложения GROUP BY, SQL также позволяет осуществлять фильтрацию — указывать, какие группы должны быть включены в результат, а какие исключены из него. Задать условия для групп можно с помощью предложения HAVING.

В самом общем смысле, предложение HAVING работает аналогично предложению WHERE, но применяется к группам. WHERE накладывает ограничения на строки, a HAVING — на группы. Т.е. сначала GROUP BY разделяет строки на наборы (по типу), затем на полученные группы накладываются условия предложения HAVING.

Если в списке выбора имеются агрегирующие функции, предложение WHERE выполняется перед ними, тогда как предложение HAVING применяется ко всему запросу в целом, после вычисления значений функций и разбиения на группы.

С точки зрения синтаксиса условного выражения, предложения HAVING и WHERE идентичны, отличие состоит лишь в том, что в условии предложения WHERE не могут находиться агрегирующие функции. Кроме того, элементы предложения HAVING быть перечислены в списке выбора.

Если в предложении HAVING есть несколько условий, они объединяются с помощью операторов AND, OR и NOT.
IDevice IconПример
Вывести список городов, количество клиентов из которых превышает 50 человек:

SQL:
SELECT region, COUNT(*)
FROM tbl_clients
GROUP BY region
HAVING COUNT(*)>50

Результат:

region COUNT(*)
Los Angeles 99
Seattle 77