Оператор HAVING в SQL використовується, коли потрібно відфільтрувати дані від використання агрегатних функцій, таких як MIN() і MAX(), SUM() і AVG() та COUNT().
|
1 2 3 4 |
SELECT COUNT(customer_id), country FROM Customers GROUP BY country HAVING COUNT(customer_id) > 1; |
Тут ми рахуємо кількість клієнтів (customer_id), групуючи їх за країнами (country), а потім повертаємо результат, якщо на країну є більше 1 клієнта.

Примітка: Оператор HAVING додали через те, що оператор WHERE не підтримує агрегатні функції. Крім того, перед оператором HAVING необхідно використовувати GROUP BY.
HAVING проти WHERE в SQL
| Оператор HAVING | Оператор WHERE |
| Перевіряє умову для групи рядків. | Перевіряє умову для кожного рядка окремо. |
| Використовується з агрегатними функціями. | Не можна використовувати з агрегатними функціями. |
| Виконується після оператора GROUP BY. | Виконується перед оператором GROUP BY. |
Давайте розглянемо приклад. Якщо ми хочемо вибрати всі замовлення, сума (amount) яких менше 500, ми можемо зробити:
|
1 2 3 |
SELECT customer_id, amount FROM Orders WHERE amount < 500; |
Тепер, якщо нам потрібно порахувати суму всіх замовлень кожного клієнта (customer_id):
|
1 2 3 |
SELECT customer_id, SUM(amount) AS total FROM Orders GROUP BY customer_id; |
Ми отримуємо згруповані дані.

Готово! Але якщо нам потрібно вибрати рядки, в яких сума замовлень менше 500 на кожного клієнта, ми можемо використати оператор HAVING наступним чином:
|
1 2 3 4 |
SELECT customer_id, SUM(amount) AS total FROM Orders GROUP BY customer_id HAVING SUM(amount) < 500; |
Результат:

