Когда нужно сгруппировать данные и одновременно применить фильтр к агрегатам, обычный
WHERE не работает. HAVING позволяет фильтровать уже агрегированные результаты.Посчитаем количество заказов на каждого клиента:
SELECT CustomerID, COUNT(*) AS OrdersCount
FROM Orders
GROUP BY CustomerID;
Теперь выберем только тех клиентов, у кого больше 5 заказов:
SELECT CustomerID, COUNT(*) AS OrdersCount
FROM Orders
GROUP BY CustomerID
HAVING COUNT(*) > 5;
Можно комбинировать разные агрегаты, например сумма и среднее:
SELECT CustomerID, SUM(TotalAmount) AS Total, AVG(TotalAmount) AS AvgOrder
FROM Orders
GROUP BY CustomerID
HAVING SUM(TotalAmount) > 1000;
🔥 Но помните: фильтр с
HAVING применяется после агрегации — сначала агрегируем, потом фильтруем.➡️ SQL Ready | #практика