Notatka Podstawowy

07. Grupuj dane i filtruj grupy

Rozróżnić WHERE i HAVING oraz poprawnie dobrać kolumny do GROUP BY.

15 września 2026 ok. 2 min czytania

Po tej lekcji potrafisz

Rozróżnić WHERE i HAVING oraz poprawnie dobrać kolumny do GROUP BY.

GROUP BY tworzy grupy wierszy o tych samych wartościach wskazanych kolumn. Następnie agregaty działają osobno w każdej grupie. WHERE filtruje wiersze przed grupowaniem, HAVING gotowe grupy. W SELECT umieszczaj kolumny grupujące lub funkcje agregujące; nie wybieraj przypadkowego tytułu obok liczby książek całej kategorii.

SELECT kategoria_id, COUNT(*) AS liczba, ROUND(AVG(cena), 2) AS srednia FROM ksiazki GROUP BY kategoria_id HAVING COUNT(*) >= 2 ORDER BY kategoria_id;

Wynik: kategoria 1 ma 3 książki i średnią 59.30; kategoria 2 ma 2 książki i średnią 54.00. Kategoria 3 odpada przez HAVING, a kategoria 4 nie występuje w tabeli ksiazki.

Teraz Twoja kolej

Dla książek wydanych od 2024 roku pokaż kategorie mające co najmniej dwie takie książki.

Sprawdź rozwiązanie i oczekiwany efekt
SELECT kategoria_id, COUNT(*) AS liczba FROM ksiazki WHERE rok >= 2024 GROUP BY kategoria_id HAVING COUNT(*) >= 2 ORDER BY kategoria_id;

Kategorie 1 i 2 mają po 2 książki. Najpierw odsiewasz roczniki, potem liczysz książki w grupach.

Na co uważać

WHERE COUNT(*) >= 2 nie zastępuje HAVING. Na etapie WHERE grupy jeszcze nie zostały policzone.

Zanim przejdziesz dalej: wykonaj ćwiczenie samodzielnie i dopiero wtedy oznacz lekcję jako ukończoną. Oznaczenie zapisuje Twój postęp, nie jest oceną nauczyciela.

Potwierdź operację