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

Grupowanie po wielu kolumnach i ORDER BY

Umiesz już grupować po jednej kolumnie i filtrować grupy. Teraz dodamy dwie potężne sztuczki: grupowanie po wielu kolumnach naraz oraz sortowanie gotowego raportu. To one zamieniają surową tabelę w czytelny, uporządkowany dokument, @name.

GROUP BY po kilku kolumnach

Do GROUP BY możesz podać więcej niż jedną kolumnę, rozdzielając je przecinkiem. MySQL utworzy wtedy osobną grupę dla każdej unikalnej kombinacji wartości tych kolumn.

1SELECT kategoria_id, rok_wydania, COUNT(*)
2FROM ksiazki
3GROUP BY kategoria_id, rok_wydania;

To znaczy: "Dla każdej pary (kategoria, rok wydania) podaj liczbę książek". Jeśli w kategorii 1 mamy książki z lat 2010 i 2020, powstaną dwie osobne grupy: (1, 2010) oraz (1, 2020).

| kategoria_id | rok_wydania | COUNT(*) | |--------------|-------------|----------| | 1 | 2010 | 5 | | 1 | 2020 | 8 | | 2 | 2020 | 3 |

Pamiętaj o zasadzie z poprzedniej komnaty: każda kolumna z listy SELECT, która nie jest agregatem, musi pojawić się w GROUP BY. Tu wymieniamy w SELECT

kategoria_id
i
rok_wydania
- i obie są w GROUP BY.

Sortowanie raportu: ORDER BY

Wynik grupowania też możemy posortować - klauzulą ORDER BY, którą znasz z wcześniejszych komnat. Co ważne: ORDER BY potrafi sortować również po funkcji agregującej.

1SELECT kategoria_id, COUNT(*)
2FROM ksiazki
3GROUP BY kategoria_id
4ORDER BY COUNT(*) DESC;

To znaczy: "Pokaż liczbę książek w każdej kategorii, a wynik ułóż od najliczniejszej kategorii do najmniej licznej". Słowo DESC (od descending) oznacza porządek malejący; ASC (lub brak słowa) - rosnący.

Miejsce ORDER BY w zapytaniu

ORDER BY zawsze stoi na samym końcu - po GROUP BY i po HAVING:

1SELECT kategoria_id, COUNT(*)
2FROM ksiazki
3GROUP BY kategoria_id
4HAVING COUNT(*) > 3
5ORDER BY COUNT(*) DESC;

Najpierw grupujemy, potem odrzucamy małe grupy (HAVING), a na końcu układamy pozostałe w żądanej kolejności. Grupowanie po wielu kolumnach i sortowanie to ostatnie pociągnięcia pędzla, które zamieniają liczby w gotowy raport!

Przejdź do CodeWorlds