GROUP BY – grupowanie wyniku zapytania – Kurs SQL
W przypadku stosowania funkcji grupujących musimy zastosować klauzulę GROUP BY
, za pomocą której określamy nazwy kolumn, po których dokonujemy grupowania. Składnia takiego polecenia jest następująca:
select kolumna1, funkcja_grupujaca(kolumna2) from tabela group by kolumna1;
Wyjątkiem jest sytuacja, kiedy korzystamy z funkcji grupującej, ale nie wskazujemy innych, dodatkowych kolumn użytych do grupowania – nie możemy wtedy użyć GROUP BY
. Składnia takiego polecenia jest następująca:
select funkcja_grupujaca(kolumna2) from tabela;
Dla przykładu, w przypadku sumowania wartości w kolumnie wynagrodzenie
, zapytanie SQL
wygląda jak poniżej:
SELECT SUM(wynagrodzenie) FROM wynagrodzenia;
Spójrzmy teraz na poniższą tabelę: wynagrodzenia
oraz na przykłady:
Tabela zawiera informację ile zarobił (wynagrodzenie
) dany pracownik (id_pracownika
) we wskazanym miesiącu/roku,
Przykład 1:
Chcemy dowiedzieć się, jakie było łączne wynagrodzenie (suma wynagrodzeń) dla każdego pracownika. Pod uwagę musimy zatem wziąć kolumnę id_prawcownika
oraz wynagrodzenie
. Jako, że ma być to sumaryczna wartość należy zastosować funkcję: sum
dla kolumny wynagrodzenie
. Spójrzmy zatem jak wygląda gotowe zapytanie SQL oraz jego wynik:
SELECT id_pracownika, SUM(wynagrodzenie) FROM wynagrodzenia GROUP BY id_pracownika
W niektórych silnikach bazodanowych po frazie GROUP BY
zamiast nazwy kolumny możemy zastosować jej numer z zapytania SQL. W naszym przykładzie grupujemy po id_pracownika
, która jest pierwszą kolumną, zatem po GROUP BY
umieścimy: 1
. Spójrzmy na gotowy kod SQL:
SELECT id_pracownika, SUM(wynagrodzenie) FROM wynagrodzenia GROUP BY 1
Przykład 2:
Korzystając z tabeli wynagrodzenia
, chcielibyśmy zobaczyć sumaryczną wartość wynagrodzeń w danym miesiącu, danego roku. Tym razem musimy wziąć pod uwagę trzy kolumny: miesiac
, rok
, wynagrodzenie
i dokonać grupowania po dwóch z nich (zakładamy, że docelowo w bazie może pojawić się inny rok niż 2021). Nasze gotowe zapytanie SQL wyglądać będzie następująco:
SELECT miesiac, rok, SUM(wynagrodzenie) FROM wynagrodzenia GROUP BY miesiac, rok;
W niektórych silnikach baz danych możemy też zastosować wersję skróconą z numerem kolumny z zapytania, tj:
SELECT miesiac, rok, SUM(wynagrodzenie) FROM wynagrodzenia GROUP BY 1, 2
Wynik powyższych zapytań jest taki sam i prezentuje się następująco:
O tym w jaki sposób możesz filtrować pogrupowane kolumny przeczytasz we wpisie: HAVING – filtrowanie pogrupowanych kolumn (GROUP BY) w wyniku zapytania.