kurs_dla_software_developer_odc4.pdf

(178 KB) Pobierz
416440360 UNPDF
Funkcje agregujące
Funkcje agregujące, to takie funkcje, które zwracają jedną wartość wyliczoną
na podstawie wielu wierszy.
Wszystkie funkcje grupowe ignorują wiersze zawierające wartość NULL w
kolumnie, na której działają.
AVG
avg ([DISTINCT] wyrażenie) – funkcja oblicza wartość średnią wyrażenia dla
wszystkich wierszy. W poniższym przykładzie jest to średnia zarobków
pracowników.
W powyższym przykładzie gdybym dodał przed słowem „salary” słowo
„distinct”, średnia zostałaby wyliczona na podstawie listy zarobków
pobranej z tabeli, ale bez powtórzeń wartości. Wynik w efekcie byłby
inny. Ta sama zasada stosuje się również do innych funkcji
agregujących.
COUNT
count ([DISTINCT] {wyrażenie|* }) – funkcja zwraca ilość wierszy dla których
wyrażenie jest różne od NULL. Użycie gwiazdki powoduje zliczenie
wszystkich wierszy w tabeli. W tym wypadku została wyświetlona ilość
pracowników.
416440360.002.png
MAX
max (wyrażenie), min(wyrażenie) – funkcje obliczają maksymalną i minimalną
wartość wyrażenia, wartość wyrażenia może być liczbą, ciągiem
znaków lub datą. W poniższym przykładzie zostały wyświetlone
najwyższa i najniższa płaca.
SUM
sum ([DISTINCT] wyrażenie) – funkcja oblicza sumę wartości wyrażeń dla
wszystkich wierszy.
Użycie klauzuli DISTINCT w powyższych funkcjach powoduje, że wiersze, dla
których agregowane wyrażenie się powtarza, agregacji podlegają tylko jeden
raz.
Przykładowo jeśli do przykładu pokazanego powyżej dodamy „distinct” przed
salary,
otrzymamy sumę pensji bez powtórek – tj. jeśli pensję 2 osób będą takie
same – wartość ich pensji policzona zostanie tylko raz:
416440360.003.png
GRUPOWANIE
group by
Grupowanie polega na podzieleniu zbioru wierszy na grupy, które mają
pewną wspólną cechę. Grupowania dokonuje się w celu zastosowania funkcji
agregujących nie w stosunku do całego zbioru wierszy, ale do
poszczególnych grup wierszy.
W celu zgrupowania rekordów należy dodać nową klauzulę GROUP BY wraz
z wyspecyfikowaniem kolumny lub wyrażenia, według którego mają być
pogrupowane wiersze. Na liście klauzuli SELECT mogą się znaleźć
tylko kolumny i wyrażenia, według których zapytanie jest grupowane,
oraz wywołania funkcji agregujących.
Powyższe zapytanie najpierw podzieliło pracowników na grupy wg lokalizacji
w której pracują, a następnie w obrębie tych grup wyliczyło ich
populację.
416440360.004.png
Przed dokonaniem grupowania można zastosować klauzulę WHERE, która
wybierze tylko część wierszy z tabeli. Klauzula WHERE wykonuje się przed
grupowaniem, a zatem nie można w tej klauzuli sprecyzować warunku
zawierającego funkcje grupowe. Aby taki warunek zawrzeć w zapytaniu
należy zastosować dodatkową klauzulę HAVING wraz z odpowiednim
warunkiem. Jest ona odpowiednikiem klauzuli WHERE, tylko, że wykonuje
się ona po procesie grupowania. W poniższym przykładzie najpierw
wybrałem numery lokalizacji w których id managera nie jest puste.
W drugim pogrupowane numery lokalizacji oraz ilość departamentów w
danej lokalizacji ale tylko te w których jest przydzielony manager.
W trzecim tylko te lokalizacje w których poza tym że jest przydzielony
manager, ilość departamentów jest większa niż 1.
416440360.005.png
Rollup
Dodanie rollup do group by spowoduje wyświetlenie podsumowania dla
każdej grupy. Poniżej przykład grupowania bez użycia rollup. Możemy
wyświetlić sumę wypłat w danym departamencie dla ludzi podległych pod
danego managera. Patrz przykład poniżej:
416440360.001.png
Zgłoś jeśli naruszono regulamin