6.1 Lista över aggregerade funktioner
När du använder radgruppering i SQL med operatorn GROUP BY
kan du använda SELECT
funktioner i satsen som fungerar på den grupperade datan. Sådana funktioner kallas också aggregerade funktioner.
Här är en lista över de mest populära:
# | Fungera | Beskrivning |
---|---|---|
1 | RÄKNA() | Returnerar antalet värden i en grupp |
2 | BELOPP() | Returnerar summan av värden i en grupp |
3 | MAX() | Returnerar det maximala värdet för en grupp |
4 | MIN() | Returnerar det lägsta värdet för en grupp |
5 | AVG() | Returnerar medelvärdet för en grupp |
6 | BIT_AND() | Utför bitvis OCH över alla gruppvärden |
7 | BIT_OR() | Utför bitvis ELLER över alla gruppvärden |
8 | BIT_XOR() | Utför en bitvis XOR över alla gruppvärden |
9 | GROUP_CONCAT() | Sammanfogar alla gruppvärden till en sträng |
Låt oss nu titta på några exempel med våra aggregerade funktioner.
6.2 Analysera anställdas löner
Låt oss beräkna lite statistik om våra anställda från personaltabellen .
Fråga ett: hur många anställda har vi?
Om vi vill ta reda på antalet av alla poster i tabellen kan vi använda aggregatfunktionen för detta COUNT
. Förfrågan kommer att se ut så här:
SELECT COUNT(*) FROM employee
Och MySQL kommer att returnera siffran 6. Vi har 6 anställda på avdelningen, inklusive en katt. Okej.
Fråga två: hur mycket betalar vi per månad till alla anställda?
För att svara på denna fråga måste vi summera lönerna för alla anställda. För att göra detta använder vi aggregatfunktionenSUM()
Förfrågan kommer att se ut så här:
SELECT SUM(salary) FROM employee
Observera att vi denna gång måste ange värdena för vilken kolumn vi sammanfattar. Vi har angett en lönekolumn . Vi kan inte bara summera alla fält i en tabell.
Och som svar kommer MySQL att returnera numret 461000. Vi har 6 anställda på avdelningen, och lönen är 461 tusen. För mycket.
Och slutligen den tredje frågan: vilka är våra högsta och lägsta löner på avdelningen? Nåväl, låt oss räkna ut medellönen. För att göra detta behöver vi funktionerna och MIN
.MAX
AVG
Frågan blir lite mer komplex den här gången och ser ut så här:
SELECT MIN(salary), AVG(salary), MAX(salary)
FROM employee
Resultatet av denna fråga blir:
MIN(lön) | AVG(lön) | MAX(lön) |
---|---|---|
1000 | 76833.3333 | 200 000 |
Minimilönen på vår avdelning är $1 000 – mycket bra. Maxlönen är 200 tusen, men det här är direktören.
Men medellönen är för hög, du måste på något sätt optimera kostnaderna. Låt oss anställa en annan katt och det är allt :)