Łapka LogoŁapka Infa
📈
Bazy Danych

Funkcje Agregujące i Grupowanie

Zliczanie, sumowanie, wyciąganie średniej i praca z blokami. Zrozum jak działa potężne GROUP BY.

Funkcje Agregujące i Grupowanie

Czasami nie chcemy wyciągać pojedynczych wierszy. Zamiast tego interesuje nas podsumowanie wszystkich danych - na przykład: "ilu mamy w bazie uczniów?", albo "jaka jest średnia ocen z matematyki?".

Służą do tego funkcje agregujące (zbierające).

Najważniejsze Funkcje Agregujące

  • COUNT(kolumna) - Zlicza, ile jest niepustych wartości w kolumnie.
  • COUNT(*) - Zlicza WSZYSTKIE wiersze (rekordy) w tabeli. Najczęstszy wybór na maturze.
  • SUM(kolumna) - Sumuje wartości liczbowe w kolumnie (np. totalne zarobki).
  • AVG(kolumna) - Wylicza średnią arytmetyczną z kolumny.
  • MAX(kolumna) / MIN(kolumna) - Wyciąga największą/najmniejszą wartość z kolumny (działa też na datach!).
-- Oblicz, ilu mamy w bazie wszystkich uczniów
SELECT COUNT(*) 
FROM Uczniowie;

Grupowanie (GROUP BY)

Prawdziwa potęga funkcji agregujących pojawia się, gdy użyjemy GROUP BY. Pozwala to wykonać funkcję nie dla całej tabeli, ale dla każdej grupy osobno.

Chcemy sprawdzić, ilu uczniów chodzi do każdej z klas. Czyli chcemy "pogrupować" bazę po klasach i dla każdej klasy zrobić COUNT.

SELECT Klasa, COUNT(*) AS Liczba_Uczniow
FROM Uczniowie
GROUP BY Klasa;

Wynik pokaże tabelkę:

  • 1A - 30
  • 1B - 28
  • 2A - 31

Zauważ słówko AS - to tz. Alias (przezwisko). Dzięki niemu nagłówek kolumny wyniku będzie się ładnie nazywał "Liczba_Uczniow", a nie brzydko "COUNT(*)".

🗄️

Interaktywna Konsola: Grupowanie i agregacja (GROUP BY)

Sprawdź liczbę pracowników, średnią pensję oraz maksymalne zarobki w poszczególnych działach firmy.

Symbole:

Filtrowanie Grup (HAVING)

Wyobraź sobie, że interesują nas z powyższego przykładu tylko takie klasy, do których chodzi więcej niż 30 osób.

Nie możemy tu użyć WHERE, bo WHERE odrzuca pojedynczych uczniów zanim zostaną pogrupowani! Jeśli chcemy odrzucić gotowe grupy, używamy klauzuli HAVING na samym końcu.

SELECT Klasa, COUNT(*) AS Liczba_Uczniow
FROM Uczniowie
GROUP BY Klasa
HAVING COUNT(*) > 30;
🗄️

Interaktywna Konsola: Filtrowanie grup (HAVING)

Wypisz działy zatrudniające co najmniej 2 osoby, w których średnia pensja przekracza 6000 zł.

Symbole:

[!WARNING] Złota zasada Grupowania Jeśli w SELECT masz jakąś "zwykłą" kolumnę (np. Klasa) oraz funkcję agregującą (np. COUNT(*)), to ta "zwykła" kolumna MUSI obowiązkowo wylądować w klauzuli GROUP BY na dole! Jeśli jej tam nie wrzucisz, większość baz danych (np. MS SQL, Oracle, a nawet nowszy MySQL) wyrzuci twardy błąd!