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:

wynagrodzenia

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.