Класс HAVING позволяет определить условие фильтра, результаты группы которого появляются в результатах.
Предложение WHERE содержит условия к выбранным столбцам, в то время как предложение HAVING содержит условия к группам, созданных GROUP BY.
Следующий блок кода показывает положение класса HAVING в запросе.
SELECT FROM WHERE GROUP BY HAVING ORDER BY
Условие HAVING должно следовать предложения GROUP BY в запросе, а также должен предшествовать ORDER BY, если используется. Следующий блок кода имеет синтаксис WHERE включая предложение HAVING:
SELECT column1, column2 FROM table1, table2 WHERE [ conditions ] GROUP BY column1, column2 HAVING [ conditions ] ORDER BY column1, column2
Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Maxim | 35 | Moscow | 21000.00 | | 2 | AndreyEx | 38 | Krasnodar | 55500.00 | | 3 | Oleg | 33 | Rostov | 34000.00 | | 4 | Masha | 35 | Moscow | 34000.00 | | 5 | Ruslan | 34 | Omsk | 45000.00 | | 6 | Dima | 32 | SP | | | 7 | Roma | 34 | SP | | +----+----------+-----+-----------+----------+
Ниже приведен пример, который будет отображать запись для подсчета групп возраста, которых было больше или равно 2.
SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS GROUP BY age HAVING COUNT(age) >= 2;
Это выдаст следующий результат:
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Maxim | 35 | Moscow | 21000.00 | | 5 | Ruslan | 34 | Omsk | 45000.00 | +----+----------+-----+-----------+----------+