Aggreger funktioner i MySQL
Aggregerede funktioner handler om
- Udfรธrelse af beregninger pรฅ flere rรฆkker
- Af en enkelt kolonne i en tabel
- Og returnere en enkelt vรฆrdi.
ISO-standarden definerer fem (5) samlede funktioner, nemlig;
1) TรL
2) SUM
3) AVG
4) MIN
5) MAKS
Hvorfor bruge aggregerede funktioner
Fra et forretningsperspektiv har forskellige organisationsniveauer forskellige informationskrav. Ledere pรฅ รธverste niveauer er normalt interesserede i at kende hele figurer og ikke nรธdvendige de individuelle detaljer.
Aggregerede funktioner giver os mulighed for nemt at producere opsummerede data fra vores database.
Fra vores myflix-database kan ledelsen for eksempel krรฆve fรธlgende rapporter
- Mindst lejede film.
- De fleste lejede film.
- Gennemsnitligt antal, at hver film er lejet ud pรฅ en mรฅned.
Vi producerer nemt ovenstรฅende rapporter ved hjรฆlp af aggregerede funktioner.
Lad os se nรฆrmere pรฅ aggregerede funktioner.
COUNT funktion
Funktionen COUNT returnerer det samlede antal vรฆrdier i det angivne felt. Det virker pรฅ bรฅde numeriske og ikke-numeriske datatyper. Alle aggregerede funktioner ekskluderer som standard nulvรฆrdier, fรธr der arbejdes pรฅ dataene.
COUNT (*) er en speciel implementering af COUNT-funktionen, der returnerer antallet af alle rรฆkker i en specificeret tabel. COUNT (*) overvejer ogsรฅ nuller og dubletter.
Tabellen vist nedenfor viser data i filmlejetabellen
| referencenummer | Overfรธrselsdato | Retur dato | medlemsnummer | film_id | film_ vendte tilbage |
|---|---|---|---|---|---|
| 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 |
Lad os antage, at vi รธnsker at fรฅ det antal gange, filmen med id 2 er blevet lejet ud
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
Udfรธrelse af ovenstรฅende forespรธrgsel i MySQL arbejdsbord mod myflixdb giver os fรธlgende resultater.
| COUNT('movie_id') |
|---|
| 3 |
DISTINKT sรธgeord
Det DISTINCT sรธgeord, der giver os mulighed for at udelade dubletter fra vores resultater. Dette opnรฅs ved at gruppere lignende vรฆrdier sammen.
For at forstรฅ konceptet Distinct, lad os udfรธre en simpel forespรธrgsel
SELECT `movie_id` FROM `movierentals`;
| movie_id |
|---|
| 1 |
| 2 |
| 2 |
| 2 |
| 3 |
Lad os nu udfรธre den samme forespรธrgsel med det sรฆrskilte sรธgeord-
SELECT DISTINCT `movie_id` FROM `movierentals`;
Som vist nedenfor udelader distinkt duplikerede poster fra resultaterne.
| movie_id |
|---|
| 1 |
| 2 |
| 3 |
MIN funktion
MIN-funktionen returnerer den mindste vรฆrdi i det angivne tabelfelt.
Lad os som et eksempel antage, at vi vil vide det รฅr, hvor den รฆldste film i vores bibliotek blev udgivet, kan vi bruge MySQL's MIN funktion for at fรฅ den รธnskede information.
Fรธlgende forespรธrgsel hjรฆlper os med at opnรฅ det
SELECT MIN(`year_released`) FROM `movies`;
Udfรธrelse af ovenstรฅende forespรธrgsel i MySQL workbench mod myflixdb giver os fรธlgende resultater.
| MIN('year_released') |
|---|
| 2005 |
MAX funktion
Ligesom navnet antyder, er MAX-funktionen det modsatte af MIN-funktionen. Det returnerer den stรธrste vรฆrdi fra det angivne tabelfelt.
Lad os antage, at vi รธnsker at fรฅ det รฅr, hvor den seneste film i vores database blev udgivet. Det kan vi nemt bruge MAX-funktionen til at opnรฅ.
Fรธlgende eksempel returnerer det seneste udgivne filmรฅr.
SELECT MAX(`year_released`) FROM `movies`;
Udfรธrelse af ovenstรฅende forespรธrgsel i MySQL workbench ved hjรฆlp af myflixdb giver os fรธlgende resultater.
| MAX('year_released') |
|---|
| 2012 |
SUM funktion
Antag, at vi รธnsker en rapport, der giver det samlede belรธb for betalinger, der er foretaget indtil videre. Vi kan bruge MySQL SUM funktion som returnerer summen af โโalle vรฆrdierne i den angivne kolonne. SUM virker kun pรฅ numeriske felter. Nulvรฆrdier er udelukket fra det returnerede resultat.
Fรธlgende tabel viser dataene i betalingstabel-
| betalings_id | medlemsnummer | betalingsdato | beskrivelse | betalt belรธb | ekstern_ reference _nummer |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Betaling for filmleje | 2500 | 11 |
| 2 | 1 | 25-07-2012 | Betaling for filmleje | 2000 | 12 |
| 3 | 3 | 30-07-2012 | Betaling for filmleje | 6000 | NULL |
Forespรธrgslen vist nedenfor fรฅr alle betalinger foretaget og opsummerer dem for at returnere et enkelt resultat.
SELECT SUM(`amount_paid`) FROM `payments`;
Udfรธrelse af ovenstรฅende forespรธrgsel i MySQL workbench mod myflixdb giver fรธlgende resultater.
| SUM('amount_paid') |
|---|
| 10500 |
AVG funktion
MySQL AVG funktion returnerer gennemsnittet af vรฆrdierne i en specificeret kolonne. Ligesom SUM-funktionen er det virker kun pรฅ numeriske datatyper.
Antag, at vi รธnsker at finde det gennemsnitlige betalte belรธb. Vi kan bruge fรธlgende forespรธrgsel -
SELECT AVG(`amount_paid`) FROM `payments`;
Udfรธrelse af ovenstรฅende forespรธrgsel i MySQL workbench, giver os fรธlgende resultater.
| AVG('amount_paid') |
|---|
| 3500 |
Hjerne teaser
Du tror, โโat aggregerede funktioner er nemme. Prรธv dette!
Fรธlgende eksempel grupperer medlemmer efter navn, tรฆller det samlede antal betalinger, det gennemsnitlige betalingsbelรธb og totalsummen af โโbetalingsbelรธbene.
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`;
Udfรธrelse af ovenstรฅende eksempel i MySQL workbench giver os fรธlgende resultater.
Resumรฉ
- MySQL understรธtter alle de fem (5) ISO-standard aggregerede funktioner COUNT, SUM, AVG, MIN og MAX.
- SUM og AVG funktioner virker kun pรฅ numeriske data.
- Hvis du vil udelukke duplikerede vรฆrdier fra de samlede funktionsresultater, skal du bruge nรธgleordet DISTINCT. Nรธgleordet ALL inkluderer endda dubletter. Hvis intet er angivet, antages ALLE som standard.
- Aggregerede funktioner kan bruges sammen med andre SQL-sรฆtninger som f.eks GROUP BY


