INF.03Bazy Danych
Grupowanie GROUP BY i klauzula HAVING
Mechanizm łączący wiersze o takich samych wartościach w grupy w celu wykonania na nich obliczeń agregujących, filtrowanych za pomocą HAVING.
Różnica między WHERE a HAVING:
WHEREfiltruje pojedyncze wiersze przed pogrupowaniem. Nie może zawierać funkcji agregujących.HAVINGfiltruje całe grupy po wykonaniu grupowania i operacji agregujących.
SQL
SELECT kategoria, AVG(cena) AS srednia_cena, COUNT(*) AS liczba_produktow
FROM produkty
WHERE aktywny = 1
GROUP BY kategoria
HAVING COUNT(*) >= 5 AND AVG(cena) > 50.00
ORDER BY srednia_cena DESC;Zasada SELECT przy GROUP BY:
W klauzuli SELECT mogą pojawić się tylko:
- Kolumny wymienione bezpośrednio w klauzuli
GROUP BY. - Wyniki funkcji agregujących (
COUNT,SUM,AVG,MIN,MAX).
Najczęstsze pułapki na egzaminie INF.03:
- CKE bardzo często sprawdza błąd polegający na umieszczeniu
AVG()lubCOUNT()w klauzuliWHERE. Pamiętaj: agregacje filtrujemy zawsze w HAVING!
Chcesz sprawdzić to pojęcie w praktyce?
Przeszukaj pytania z oficjalnych arkuszy CKE powiązane z hasłem Grupowanie GROUP BY i klauzula HAVING lub rozpocznij trening.