Używamy cookies, żeby zwiększyć Twoje doświadczenia na stronie
CodeWorlds

GROUP BY - grupowanie danych

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.

Czym jest grupowanie?

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 |

Zasada: SELECT a GROUP BY

To ważna reguła: na liście SELECT mogą znaleźć się tylko:

  • kolumny wymienione w GROUP BY (tu:
    kategoria_id
    ),
  • oraz funkcje agregujące (tu:
    COUNT(*)
    ).

Dlaczego? Bo każdy wiersz wyniku reprezentuje całą grupę. Pytanie "jaki jest tytuł tej grupy" nie ma sensu - grupa zawiera wiele tytułów.

Inne przykłady grupowania

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!

Przejdź do CodeWorlds