Umiemy już policzyć książki w każdej kategorii. Ale co, jeśli interesują nas tylko popularne kategorie - te z więcej niż trzema książkami? Nie możemy użyć WHERE - poznasz dlaczego za chwilę. Do filtrowania grup służy klauzula HAVING.
HAVING filtruje całe grupy na podstawie wyniku funkcji agregującej - już po wykonaniu GROUP BY.
1SELECT kategoria_id, COUNT(*)
2FROM ksiazki
3GROUP BY kategoria_id
4HAVING COUNT(*) > 3;To znaczy: "Pokaż kategorie, ale tylko te, które mają więcej niż 3 książki". Najpierw MySQL podzielił książki na grupy, policzył każdą, a potem odrzucił grupy, które nie spełniły warunku.
Najważniejsza cecha HAVING: może odwoływać się do funkcji agregujących, których WHERE użyć nie potrafi.
1-- Kategorie, w których średnia cena przekracza 50
2SELECT kategoria_id, AVG(cena)
3FROM ksiazki
4GROUP BY kategoria_id
5HAVING AVG(cena) > 50;1-- Kraje, z których mamy co najmniej 5 autorów
2SELECT kraj, COUNT(*)
3FROM autorzy
4GROUP BY kraj
5HAVING COUNT(*) >= 5;Zapamiętaj porządek: GROUP BY zawsze stoi przed HAVING:
1SELECT kolumna, COUNT(*)
2FROM tabela
3GROUP BY kolumna
4HAVING COUNT(*) > liczba;HAVING to sito, przez które przesypujemy gotowe grupy - zostają tylko te wystarczająco duże, drogie albo liczne.