6.1 Lista funkcji agregujących
Kiedy używasz grupowania wierszy w SQL z operatorem GROUP BY
, możesz użyć SELECT
funkcji w instrukcji, które operują na zgrupowanych danych. Takie funkcje są również nazywane funkcjami agregującymi.
Oto lista najpopularniejszych z nich:
# | Funkcjonować | Opis |
---|---|---|
1 | LICZYĆ() | Zwraca liczbę wartości w grupie |
2 | SUMA() | Zwraca sumę wartości w grupie |
3 | MAKS() | Zwraca maksymalną wartość grupy |
4 | MIN() | Zwraca minimalną wartość grupy |
5 | Śr.() | Zwraca średnią grupy |
6 | BIT_AND() | Wykonuje bitową operację AND na wszystkich wartościach grupy |
7 | BIT_LUB() | Wykonuje bitową operację LUB na wszystkich wartościach grupy |
8 | BIT_XOR() | Wykonuje bitowe XOR na wszystkich wartościach grupy |
9 | GROUP_CONCAT() | Łączy wszystkie wartości grupy w jeden ciąg |
Teraz spójrzmy na kilka przykładów z naszymi funkcjami agregującymi.
6.2 Analiza wynagrodzeń pracowników
Obliczmy statystyki dotyczące naszych pracowników z tabeli pracowników .
Pytanie pierwsze: ilu mamy pracowników?
Jeśli chcemy poznać liczbę wszystkich rekordów w tabeli, możemy użyć do tego celu funkcji agregującej COUNT
. Żądanie będzie wyglądać następująco:
SELECT COUNT(*) FROM employee
A MySQL jako odpowiedź zwróci liczbę 6. Mamy 6 pracowników w dziale, w tym kota. W porządku.
Pytanie drugie: ile płacimy miesięcznie wszystkim pracownikom?
Aby odpowiedzieć na to pytanie, musimy zsumować wynagrodzenia wszystkich pracowników. W tym celu używamy funkcji agregującejSUM()
Żądanie będzie wyglądać następująco:
SELECT SUM(salary) FROM employee
Zauważ, że tym razem jesteśmy zobowiązani do określenia wartości której kolumny podsumowujemy. Określiliśmy kolumnę wynagrodzeń . Nie możemy po prostu zsumować wszystkich pól w tabeli.
A MySQL jako odpowiedź zwróci numer 461000. Mamy w dziale 6 pracowników, a pensja to 461 tys. Zbyt wiele.
I na koniec trzecie pytanie: jakie są nasze maksymalne i minimalne wynagrodzenia w dziale? Cóż, obliczmy średnią pensję. Aby to zrobić, potrzebujemy funkcji MIN
, MAX
i AVG
.
Tym razem zapytanie będzie nieco bardziej złożone i będzie wyglądać tak:
SELECT MIN(salary), AVG(salary), MAX(salary)
FROM employee
Wynikiem tego zapytania będzie:
MIN(pensja) | Średnia (wynagrodzenie) | MAKS(pensja) |
---|---|---|
1000 | 76833.3333 | 200000 |
Płaca minimalna w naszym dziale to 1000 dolarów – bardzo dobrze. Maksymalna pensja to 200 tysięcy, ale to dyrektor.
Ale średnia pensja jest zbyt wysoka, trzeba jakoś zoptymalizować koszty. Zatrudnimy drugiego kota i tyle :)