Aggregera funktioner i MySQL
Aggregerade funktioner handlar om
- Utfรถra berรคkningar pรฅ flera rader
- Av en enda kolumn i en tabell
- Och returnera ett enda vรคrde.
ISO-standarden definierar fem (5) aggregerade funktioner, nรคmligen;
1) RรKNING
2) SUMMA
3) AVG
4) MIN
5) MAX
Varfรถr anvรคnda aggregerade funktioner
Ur ett affรคrsperspektiv har olika organisationsnivรฅer olika informationskrav. Chefer pรฅ hรถgsta nivรฅer รคr vanligtvis intresserade av att kรคnna till hela siffror och behรถver inte de enskilda detaljerna.
Aggregatfunktioner gรถr att vi enkelt kan producera sammanfattade data frรฅn vรฅr databas.
Till exempel, frรฅn vรฅr myflix-databas kan ledningen krรคva fรถljande rapporter
- Minst hyrda filmer.
- Mest hyrda filmer.
- Genomsnittligt antal som varje film hyrs ut under en mรฅnad.
Vi producerar enkelt ovanstรฅende rapporter med hjรคlp av aggregerade funktioner.
Lรฅt oss titta pรฅ aggregerade funktioner i detalj.
COUNT-funktionen
Funktionen COUNT returnerar det totala antalet vรคrden i det angivna fรคltet. Det fungerar pรฅ bรฅde numeriska och icke-numeriska datatyper. Alla aggregerade funktioner exkluderar som standard nollvรคrden innan du arbetar med data.
COUNT (*) รคr en speciell implementering av COUNT-funktionen som returnerar antalet av alla rader i en specificerad tabell. COUNT (*) beaktar ocksรฅ nollor och dubbletter.
Tabellen nedan visar data i tabellen fรถr hyrfilmer
| referensnummer | Transaktions Datum | ร terlรคmningsdatum | medlemsnummer | movie_id | film_ รฅtervรคnde |
|---|---|---|---|---|---|
| 11 | 20-06-2012 | NULL | 1 | 1 | 0 |
| 12 | 22-06-2012 | 25-06-2012 | 1 | 2 | 0 |
| 13 | 22-06-2012 | 25-06-2012 | 3 | 2 | 0 |
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |
| 15 | 23-06-2012 | NULL | 3 | 3 | 0 |
Lรฅt oss anta att vi vill fรฅ det antal gรฅnger som filmen med id 2 har hyrts ut
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
Utfรถr ovanstรฅende frรฅga i MySQL arbetsbรคnk mot myflixdb ger oss fรถljande resultat.
| COUNT('movie_id') |
|---|
| 3 |
DISTINKT nyckelord
Nyckelordet DISTINCT som gรถr att vi kan utelรคmna dubbletter frรฅn vรฅra resultat. Detta uppnรฅs genom att gruppera liknande vรคrden tillsammans.
Fรถr att uppskatta konceptet Distinct, lรฅt oss kรถra en enkel frรฅga
SELECT `movie_id` FROM `movierentals`;
| movie_id |
|---|
| 1 |
| 2 |
| 2 |
| 2 |
| 3 |
Lรฅt oss nu kรถra samma frรฅga med det distinkta nyckelordet-
SELECT DISTINCT `movie_id` FROM `movierentals`;
Som visas nedan utelรคmnar distinkt dubblettposter frรฅn resultaten.
| movie_id |
|---|
| 1 |
| 2 |
| 3 |
MIN-funktionen
MIN-funktionen returnerar det minsta vรคrdet i det angivna tabellfรคltet.
Som ett exempel, lรฅt oss anta att vi vill veta det รฅr dรฅ den รคldsta filmen i vรฅrt bibliotek slรคpptes, vi kan anvรคnda MySQLMIN-funktion fรถr att fรฅ รถnskad information.
Fรถljande frรฅga hjรคlper oss att uppnรฅ det
SELECT MIN(`year_released`) FROM `movies`;
Utfรถr ovanstรฅende frรฅga i MySQL workbench mot myflixdb ger oss fรถljande resultat.
| MIN('year_released') |
|---|
| 2005 |
MAX-funktionen
Precis som namnet antyder รคr MAX-funktionen motsatsen till MIN-funktionen. Det returnerar det stรถrsta vรคrdet frรฅn det angivna tabellfรคltet.
Lรฅt oss anta att vi vill fรฅ det รฅr dรฅ den senaste filmen i vรฅr databas slรคpptes. Vi kan enkelt anvรคnda MAX-funktionen fรถr att uppnรฅ det.
Fรถljande exempel returnerar det senaste filmรฅret som slรคpptes.
SELECT MAX(`year_released`) FROM `movies`;
Utfรถr ovanstรฅende frรฅga i MySQL workbench med myflixdb ger oss fรถljande resultat.
| MAX('year_released') |
|---|
| 2012 |
SUM-funktionen
Anta att vi vill ha en rapport som visar det totala antalet betalningar som gjorts hittills. Vi kan anvรคnda MySQL SUMMA funktion som returnerar summan av alla vรคrden i den angivna kolumnen. SUM fungerar endast pรฅ numeriska fรคlt. Nullvรคrden exkluderas frรฅn resultatet som returneras.
Fรถljande tabell visar uppgifterna i betalningstabellen-
| betalnings-id | medlemsnummer | betalningsdag | beskrivning | betalt belopp | extern_ referensnummer |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Betalning fรถr filmuthyrning | 2500 | 11 |
| 2 | 1 | 25-07-2012 | Betalning fรถr filmuthyrning | 2000 | 12 |
| 3 | 3 | 30-07-2012 | Betalning fรถr filmuthyrning | 6000 | NULL |
Frรฅgan som visas nedan fรฅr alla betalningar gjorda och summerar dem fรถr att returnera ett enda resultat.
SELECT SUM(`amount_paid`) FROM `payments`;
Utfรถr ovanstรฅende frรฅga i MySQL arbetsbรคnk mot myflixdb ger fรถljande resultat.
| SUM('amount_paid') |
|---|
| 10500 |
AVG fungera
MySQL AVG fungera returnerar medelvรคrdet av vรคrdena i en angiven kolumn. Precis som SUM-funktionen, det fungerar endast pรฅ numeriska datatyper.
Anta att vi vill hitta det genomsnittliga beloppet som betalats. Vi kan anvรคnda fรถljande frรฅga -
SELECT AVG(`amount_paid`) FROM `payments`;
Utfรถr ovanstรฅende frรฅga i MySQL arbetsbรคnk, ger oss fรถljande resultat.
| AVG('amount_paid') |
|---|
| 3500 |
Hjรคrngymnastik
Du tror att aggregerade funktioner รคr lรคtta. Prova detta!
Fรถljande exempel grupperar medlemmar efter namn, rรคknar det totala antalet betalningar, det genomsnittliga betalningsbeloppet och den totala summan av betalningsbeloppen.
SELECT m.`full_names`,COUNT(p.`payment_id`) AS `paymentscount`,AVG(p.`amount_paid`) AS `averagepaymentamount`,SUM(p.`amount_paid`) AS `totalpayments` FROM members m, payments p WHERE m.`membership_number` = p.`membership_number` GROUP BY m.`full_names`;
Utfรถr exemplet ovan i MySQL workbench ger oss fรถljande resultat.
Sammanfattning
- MySQL stรถder alla fem (5) ISO-standardaggregatfunktionerna COUNT, SUM, AVG, MIN och MAX.
- SUMMA och AVG funktioner fungerar bara pรฅ numeriska data.
- Om du vill utesluta dubbletter av vรคrden frรฅn de aggregerade funktionsresultaten, anvรคnd nyckelordet DISTINCT. Nyckelordet ALL inkluderar รคven dubbletter. Om inget anges antas ALL som standard.
- Aggregatfunktioner kan anvรคndas tillsammans med andra SQL-satser som t.ex GRUPP AV


