GROUP BY: liczenie w grupach
GROUP BY dzieli wiersze na grupy o tej samej wartości. Funkcja agregująca liczy wtedy osobno dla każdej grupy, a z każdej grupy zostaje jeden wiersz wyniku.
Grupy to pudełka
`GROUP BY` rozkłada wiersze do pudełek: jedno pudełko na każdą wartość kolumny.
Funkcja agregująca liczy osobno w każdym pudełku.
Z każdego pudełka zostaje dokładnie jeden wiersz wyniku.
Uczniowie z tego samego miasta stają razem, a COUNT(*) liczy każdą grupę. Brak miasta (NULL) też tworzy swoją grupę.
To zapytanie możesz zmienić: kliknij w nie, wpisz swoje i naciśnij Enter. Uczniowie odegrają Twoją wersję.
FROM uczniowie: 6 wierszy w szeregu. Każdy wiersz to jedna postać, a kartki pod nią to kolumny.
| imie | nazwisko | miasto |
|---|---|---|
| Ola | Mazur | Kraków |
| Maja | Kaczmarek | Kraków |
| Filip | Grabowski | Niepołomice |
| Szymon | Michalski | Skawina |
| Lena | Król | Kraków |
| Antoni | Wieczorek | NULL |
Grupować możesz po każdej kolumnie, np. po klasie.
FROM uczniowie: 6 wierszy w szeregu. Każdy wiersz to jedna postać, a kartki pod nią to kolumny.
| imie | nazwisko | klasa_id |
|---|---|---|
| Ola | Mazur | 1 |
| Maja | Kaczmarek | 1 |
| Filip | Grabowski | 1 |
| Szymon | Michalski | 2 |
| Lena | Król | 2 |
| Antoni | Wieczorek | 2 |
Średnia każdego ucznia: grupa to wszystkie oceny jednego ucznia.
FROM oceny: 6 wierszy w szeregu. Każdy wiersz to jedna postać, a kartki pod nią to kolumny.
| uczen_id | ocena |
|---|---|
| 1 | 6 |
| 1 | 5 |
| 3 | 5 |
| 3 | 4 |
| 4 | 3 |
| 4 | 2 |
Grupy sortujesz jak zwykłe wiersze, także po wartości funkcji. Przy remisie decyduje drugi klucz, tu nazwa miasta.
FROM uczniowie: 6 wierszy w szeregu. Każdy wiersz to jedna postać, a kartki pod nią to kolumny.
| imie | nazwisko | miasto |
|---|---|---|
| Ola | Mazur | Kraków |
| Maja | Kaczmarek | Kraków |
| Filip | Grabowski | Niepołomice |
| Szymon | Michalski | Skawina |
| Lena | Król | Kraków |
| Antoni | Wieczorek | NULL |
Pułapka
Każda kolumna w SELECT musi stać w GROUP BY albo w funkcji agregującej. Ta baza przepuści błąd i wypisze wartość z przypadkowego wiersza grupy.