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.