Przejdź do treści głównej
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:

  • WHERE filtruje pojedyncze wiersze przed pogrupowaniem. Nie może zawierać funkcji agregujących.
  • HAVING filtruje 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:

  1. Kolumny wymienione bezpośrednio w klauzuli GROUP BY.
  2. 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() lub COUNT() w klauzuli WHERE. 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.