Do tej pory liczyliśmy wszystkie książki naraz. Ale co, jeśli chcemy policzyć je osobno dla każdej kategorii? Tu wkracza najpotężniejsze zaklęcie tej komnaty - GROUP BY.
GROUP BY dzieli wiersze na grupy o tej samej wartości w wybranej kolumnie, a następnie pozwala policzyć agregat dla każdej grupy osobno.
Wyobraź sobie, że bierzesz wszystkie zwoje z regału i układasz je na osobne kupki - jedna kupka na kategorię. Potem liczysz każdą kupkę z osobna.
1SELECT kategoria_id, COUNT(*)
2FROM ksiazki
3GROUP BY kategoria_id;To znaczy: "Dla każdej kategorii podaj jej numer i liczbę książek". Wynik to po jednym wierszu na kategorię:
| kategoria_id | COUNT(*) | |--------------|----------| | 1 | 42 | | 2 | 18 | | 3 | 90 |
To ważna reguła: na liście SELECT mogą znaleźć się tylko:
kategoria_id),COUNT(*)).Dlaczego? Bo każdy wiersz wyniku reprezentuje całą grupę. Pytanie "jaki jest tytuł tej grupy" nie ma sensu - grupa zawiera wiele tytułów.
1-- Średnia cena książki w każdej kategorii
2SELECT kategoria_id, AVG(cena)
3FROM ksiazki
4GROUP BY kategoria_id;1-- Ilu autorów pochodzi z każdego kraju
2SELECT kraj, COUNT(*)
3FROM autorzy
4GROUP BY kraj;GROUP BY zamienia jeden wielki regał w przejrzysty raport. To serce analizy danych!