Having (SQL)
HAVING
— необов'язковий параметр оператора SELECT
для зазначення умови на результат агрегатних функцій (MAX, SUM, AVG, …).
HAVING <умови>
подібний до WHERE <умови>
за винятком того, що рядки відбираються не за значенням стовпців, а будуються зі значень стовпців вказаних в GROUP BY і значень агрегатних функцій, обчислених для кожної групи, утвореної GROUP BY. Якщо GROUP BY не використовується, HAVING поводить себе як WHERE.
Приклади
Для отримання списку ідентифікаційних номерів відділень, в яких загальна зарплатня 1 січня 2000 року перевищує $1000, разом із сумою зарплат на цей день:
SELECT DeptID, SUM(SaleAmount)
FROM Sales
WHERE SaleDate = '01-Jan-2000'
GROUP BY DeptID
HAVING SUM(SaleAmount) > 1000
Наступний запит поверне список відділів, в яких працює більше ніж один співробітник:
SELECT DepartmentName, COUNT(*)
FROM employee,department
WHERE employee.DepartmentID = department.DepartmentID
GROUP BY DepartmentName
HAVING COUNT(*)>1;
HAVING
— це зручно, але не обов'язково. Код тотожний наведеному вище, але без використання HAVING
, може виглядати так:
SELECT * FROM (
SELECT DepartmentName AS deptNam, COUNT(*) AS empCnt
FROM Employee AS emp, Department AS dept
WHERE emp.DepartmentID = dept.DepartmentID
GROUP BY deptNam
) AS grp
WHERE grp.empCnt > 1;