Оператор SQL HAVING


Оператор SQL HAVING является указателем на результат выполнения агрегатных функций. Агрегатной функцией в языке SQL называется функция, возвращающая какое-либо одно значение по набору значений столбца. Такими функциями являются: SQL COUNT(), SQL MIN(), SQL MAX(), SQL AVG(), SQL SUM().

Оператор SQL HAVING имеет следующий синтаксис:

HAVING aggregate_function(column_name) operator value

Оператор SQL HAVING аналогичен оператору SQL WHERE за тем исключением, что применяется не для всего набора столбцов таблицы, а для набора созданного оператором SQL GROUP BY и применяется всегда строго после него.


Примеры оператора SQL HAVING. Имеется следующая таблица Artists:

Singer Album Year Sale
The Prodigy Invaders Must Die 2008 1200000
Drowning Pool Sinner 2001 400000
Massive Attack Mezzanine 1998 2300000
The Prodigy Fat of the Land 1997 600000
The Prodigy Music For The Jilted Generation 1994 1500000
Massive Attack 100th Window 2003 1200000
Drowning Pool Full Circle 2007 800000
Massive Attack Danny The Dog 2004 1900000
Drowning Pool Resilience 2013 500000

Пример 1. Используя оператор SQL HAVING вывести название исполнителей (Singer) число продаж альбомов (Sale) которого больше 2000000:

SELECT Singer, SUM(Sale)
FROM Artists
GROUP BY Singer
HAVING SUM(Sale) > 2000000

Результат:

Singer Sum(Sale)
Massive Attack 54000000
The Prodigy 33000000

В результат не попала группа Drowning Pool, так как общее число проданных ею пластинок равняется 1700000

Пример 2. Используя оператор SQL HAVING вывести название исполнителя, который исполнялся еще до 1995 года:

SELECT Singer, MIN(Year)
FROM Artists
GROUP BY Singer
HAVING MIN(Year) < 1995

Результат:

Singer MIN(Year)
The Prodigy 1994