Filtracja grup (HAVING) – zaawansowane filtrowanie danych po agregacji
GROUP BY
to klauzula w SQL, która pozwala nam grupować rekordy w tabeli według jednej lub więcej kolumn. Dzięki GROUP BY
możemy używać funkcji agregujących, takich jak COUNT
, SUM
, AVG
, MIN
i MAX
, aby uzyskać podsumowania dla każdej grupy. Na przykład możemy policzyć liczbę uczniów w każdej klasie lub obliczyć całkowitą sprzedaż dla każdego produktu.
Po pogrupowaniu danych za pomocą GROUP BY
możemy użyć klauzuli HAVING
, aby filtrować wyniki po agregacji. Klauzula HAVING
działa podobnie jak WHERE
, ale stosuje się ją do grup, a nie do pojedynczych wierszy.
Składnia GROUP BY
GROUP BY
jest używane razem z funkcjami agregującymi, aby pogrupować dane według określonych kolumn.
Podstawowa składnia:
SELECT kolumna, funkcja_agregująca(kolumna)
FROM tabela
GROUP BY kolumna;
W tej składni wybieramy kolumnę, według której chcemy grupować dane, a następnie stosujemy funkcję agregującą, aby uzyskać wyniki dla każdej grupy.
Przykłady Użycia GROUP BY
Przykład 1: Grupowanie uczniów według klasy
Przykład: Policz, ilu uczniów jest w każdej klasie.
SELECT klasa, COUNT(*) AS liczba_uczniow
FROM Uczen
GROUP BY klasa;
W tym przykładzie GROUP BY klasa
grupuje wszystkich uczniów według ich klasy, a COUNT(*)
liczy, ilu uczniów jest w każdej z tych klas. Wynik pokazuje liczbę uczniów w każdej klasie.
Przykład 2: Obliczanie średniej ceny produktów według kategorii
Przykład: Oblicz średnią cenę produktów w każdej kategorii.
SELECT kategoria, AVG(cena) AS srednia_cena
FROM Produkty
GROUP BY kategoria;
W tym przykładzie GROUP BY kategoria
grupuje produkty według ich kategorii, a AVG(cena)
oblicza średnią cenę produktów w każdej kategorii.
Przykład 3: Suma sprzedaży według produktu
Przykład: Oblicz całkowitą wartość sprzedaży dla każdego produktu.
SELECT nazwa_produktu, SUM(sprzedaz) AS calkowita_sprzedaz
FROM Sprzedaz
GROUP BY nazwa_produktu;
W tym przykładzie GROUP BY nazwa_produktu
grupuje wszystkie rekordy według nazw produktów, a SUM(sprzedaz)
oblicza całkowitą sprzedaż dla każdego z tych produktów.
Użycie GROUP BY
z HAVING
Czasami po grupowaniu danych chcemy przefiltrować te grupy na podstawie wyników funkcji agregujących. Do tego służy klauzula HAVING
. HAVING
działa podobnie do WHERE
, ale jest używana do filtrowania wyników po zastosowaniu GROUP BY
.
Przykład: Znajdź kategorie produktów, które mają średnią cenę większą niż 50.
SELECT kategoria, AVG(cena) AS srednia_cena
FROM Produkty
GROUP BY kategoria
HAVING AVG(cena) > 50;
W tym przykładzie HAVING AVG(cena) > 50
filtruje grupy, aby pokazać tylko te kategorie, w których średnia cena produktu jest większa niż 50.
Przykład 4: Filtracja grup za pomocą HAVING
Przykład: Znajdź klasy, które mają więcej niż 20 uczniów.
SELECT klasa, COUNT(*) AS liczba_uczniow
FROM Uczen
GROUP BY klasa
HAVING COUNT(*) > 20;
W tym przykładzie HAVING COUNT(*) > 20
filtruje grupy, aby pokazać tylko te klasy, które mają więcej niż 20 uczniów.
Testy przypięte do lekcji | |
---|---|
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się |