Оператор 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 |