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