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.
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.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.
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!