6.1 Liste over aggregerte funksjoner
Når du bruker radgruppering i SQL med operatoren GROUP BY
, kan du bruke SELECT
funksjoner i setningen som opererer på de grupperte dataene. Slike funksjoner kalles også aggregerte funksjoner.
Her er en liste over de mest populære:
# | Funksjon | Beskrivelse |
---|---|---|
1 | TELLE() | Returnerer antall verdier i en gruppe |
2 | SUM() | Returnerer summen av verdier i en gruppe |
3 | MAKS() | Returnerer maksimumsverdien for en gruppe |
4 | MIN() | Returnerer minimumsverdien for en gruppe |
5 | AVG() | Returnerer gjennomsnittet av en gruppe |
6 | BIT_AND() | Utfører bitvis OG over alle gruppeverdier |
7 | BIT_OR() | Utfører bitvis ELLER over alle gruppeverdier |
8 | BIT_XOR() | Utfører en bitvis XOR over alle gruppeverdier |
9 | GROUP_CONCAT() | Slår sammen alle gruppeverdier til én streng |
La oss nå se på noen eksempler med våre aggregerte funksjoner.
6.2 Analysere ansattes lønn
La oss beregne litt statistikk om våre ansatte fra ansatttabellen .
Spørsmål en: hvor mange ansatte har vi?
Hvis vi ønsker å finne ut antallet av alle poster i tabellen, så kan vi bruke aggregeringsfunksjonen til dette COUNT
. Forespørselen vil se slik ut:
SELECT COUNT(*) FROM employee
Og som svar vil MySQL returnere tallet 6. Vi har 6 ansatte på avdelingen, inkludert en katt. Greit.
Spørsmål to: hvor mye betaler vi per måned til alle ansatte?
For å svare på dette spørsmålet må vi summere lønnen til alle ansatte. For å gjøre dette bruker vi aggregatfunksjonenSUM()
Forespørselen vil se slik ut:
SELECT SUM(salary) FROM employee
Merk at vi denne gangen må spesifisere verdiene for hvilken kolonne vi oppsummerer. Vi har spesifisert en lønnskolonne . Vi kan ikke bare summere alle feltene i en tabell.
Og som svar vil MySQL returnere nummer 461000. Vi har 6 ansatte på avdelingen, og lønnen er 461 tusen. For mye.
Og til slutt, det tredje spørsmålet: hva er vår høyeste og minste lønn i avdelingen? Vel, la oss beregne gjennomsnittslønnen. For å gjøre dette trenger vi funksjonene MIN
, MAX
og AVG
.
Spørringen vil være litt mer kompleks denne gangen og se slik ut:
SELECT MIN(salary), AVG(salary), MAX(salary)
FROM employee
Resultatet av denne spørringen vil være:
MIN(lønn) | AVG(lønn) | MAX(lønn) |
---|---|---|
1000 | 76833.3333 | 200 000 |
Minstelønnen i vår avdeling er $1000 – veldig bra. Maksimal lønn er 200 tusen, men dette er direktøren.
Men gjennomsnittslønnen er for høy, du må på en eller annen måte optimalisere kostnadene. La oss ansette en annen katt og det er det :)