O co chodzi z tym grupowaniem (GROUP BY)?


Marcinie, spójrz na załączony obrazek – przykład zastosowania grupowania. W tabeli TABELA_OCEN zgromadziłem w trzech polach dane dotyczące uczniów dwóch klas, ich płci oraz ich ocenie końcowej. Z zasadzie powinno być też pole NAZWISKO, wówczas tabela byłaby kompletna, ale dla pokazania grupowania to pole jest zbędne. 

Chcę policzyć  średnią ocen, ale osobno dla klasy oraz dodatkowo osobno dla kobiet i mężczyzn. Jeżeli wykorzystam do tego celu EXCEL to niejako automatycznie podzielę na podzbiory i dopiero wówczas obliczę średnią. Obrazek odpowiednio pokolorowałem, by pokazać, na jakie podzbiory podzieliłem dane. 

W przypadku zastosowania języka SQL występuje analogiczna potrzeba podziału zbioru. Jeżeli w sekcji pomiędzy SELECT a FROM chcę wykorzystać / uzyskać wartość agregowaną  (średnią w tym przypadku) oraz wiem, iż chcę tę wartość w zależności od klasy i płci to po zakończeniu sekcji WHERE,  niejako „na końcu” muszę dodać klauzulę GROUP BY i wymienić pola, według których dokonałem podziału tabeli na podzbiory. 


Marcinie, baza sama nie wymyśli dodania klauzuli GROUP BY i pełnej listy pól, według których ma pogrupować dane. Trzeba ten wykaz sporządzić każdorazowo samemu. Jeżeli w sekcji pomiędzy SELECT a FROM zażądałem nie tylko wyświetlenia wartości pól, ale są tam wyrażenia (ale nie agregujące) to takie wyrażenia (bez aliasów, jeżeli nadałeś) musisz też wymienić po ORDER BY.


Brak komentarzy:

Prześlij komentarz