Samle funksjoner i MySQL
Aggregerte funksjoner handler om
- Utføre beregninger på flere rader
- Av en enkelt kolonne i en tabell
- Og returnerer én enkelt verdi.
ISO-standarden definerer fem (5) samlede funksjoner, nemlig;
1) TELL
2) SUM
3) AVG
4) MIN
5) MAKS
Hvorfor bruke aggregerte funksjoner
Fra et forretningsperspektiv har ulike organisasjonsnivåer ulike informasjonskrav. Ledere på toppnivå er vanligvis interessert i å kjenne til hele figurer og ikke nødvendige individuelle detaljer.
Aggregerte funksjoner lar oss enkelt produsere oppsummerte data fra databasen vår.
Fra myflix-databasen vår kan ledelsen for eksempel kreve følgende rapporter
- Minst leide filmer.
- De fleste leide filmer.
- Gjennomsnittlig antall at hver film leies ut i løpet av en måned.
Vi produserer enkelt rapporter ovenfor ved hjelp av aggregerte funksjoner.
La oss se nærmere på aggregerte funksjoner.
COUNT funksjon
COUNT-funksjonen returnerer det totale antallet verdier i det angitte feltet. Det fungerer på både numeriske og ikke-numeriske datatyper. Alle aggregerte funksjoner ekskluderer som standard nullverdier før du arbeider med dataene.
COUNT (*) er en spesiell implementering av COUNT-funksjonen som returnerer antallet av alle radene i en spesifisert tabell. COUNT (*) vurderer også nuller og duplikater.
Tabellen vist nedenfor viser data i leiefilmtabellen
referansenummer | transaksjonsdato | return_date | medlemsnummer | movie_id | film_ returnerte |
---|---|---|---|---|---|
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 |
La oss anta at vi ønsker å få antall ganger filmen med id 2 har blitt leid ut
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
Utfører spørringen ovenfor i MySQL arbeidsbenk mot myflixdb gir oss følgende resultater.
COUNT('movie_id') |
---|
3 |
DISTINKT nøkkelord
DISTINCT søkeordet som lar oss utelate duplikater fra resultatene våre. Dette oppnås ved å gruppere lignende verdier sammen.
For å sette pris på konseptet Distinct, la oss utføre en enkel spørring
SELECT `movie_id` FROM `movierentals`;
movie_id |
---|
1 |
2 |
2 |
2 |
3 |
La oss nå utføre det samme søket med det distinkte søkeordet-
SELECT DISTINCT `movie_id` FROM `movierentals`;
Som vist nedenfor utelater distinkt dupliserte poster fra resultatene.
movie_id |
---|
1 |
2 |
3 |
MIN funksjon
MIN-funksjonen returnerer den minste verdien i det angitte tabellfeltet.
Som et eksempel, la oss anta at vi ønsker å vite året da den eldste filmen i biblioteket vårt ble utgitt, kan vi bruke MySQLsin MIN-funksjon for å få ønsket informasjon.
Følgende spørring hjelper oss å oppnå det
SELECT MIN(`year_released`) FROM `movies`;
Utfører spørringen ovenfor i MySQL workbench mot myflixdb gir oss følgende resultater.
MIN('year_released') |
---|
2005 |
MAX-funksjon
Akkurat som navnet antyder, er MAX-funksjonen det motsatte av MIN-funksjonen. Den returnerer den største verdien fra det angitte tabellfeltet.
La oss anta at vi ønsker å få året da den siste filmen i databasen vår ble utgitt. Vi kan enkelt bruke MAX-funksjonen for å oppnå det.
Følgende eksempel viser det siste filmåret som ble utgitt.
SELECT MAX(`year_released`) FROM `movies`;
Utfører spørringen ovenfor i MySQL arbeidsbenk ved hjelp av myflixdb gir oss følgende resultater.
MAX('year_released') |
---|
2012 |
SUM funksjon
Anta at vi ønsker en rapport som gir totalbeløpet for betalinger som er gjort så langt. Vi kan bruke MySQL SUM funksjon som returnerer summen av alle verdiene i den angitte kolonnen. SUM fungerer kun på numeriske felt. Nullverdier er ekskludert fra resultatet som returneres.
Følgende tabell viser dataene i betalingstabellen-
betalings-ID | medlemsnummer | betalingsdato | beskrivelse | beløp_ betalt | ekstern_referansenummer |
---|---|---|---|---|---|
1 | 1 | 23-07-2012 | Betaling for leie av film | 2500 | 11 |
2 | 1 | 25-07-2012 | Betaling for leie av film | 2000 | 12 |
3 | 3 | 30-07-2012 | Betaling for leie av film | 6000 | NULL |
Spørringen vist nedenfor får alle betalinger utført og summerer dem opp for å returnere ett enkelt resultat.
SELECT SUM(`amount_paid`) FROM `payments`;
Utfører spørringen ovenfor i MySQL arbeidsbenk mot myflixdb gir følgende resultater.
SUM('amount_paid') |
---|
10500 |
AVG funksjon
MySQL AVG funksjon returnerer gjennomsnittet av verdiene i en spesifisert kolonne. Akkurat som SUM-funksjonen, det fungerer bare på numeriske datatyper.
Anta at vi ønsker å finne gjennomsnittsbeløpet som er betalt. Vi kan bruke følgende spørring –
SELECT AVG(`amount_paid`) FROM `payments`;
Utfører spørringen ovenfor i MySQL arbeidsbenk, gir oss følgende resultater.
AVG('amount_paid') |
---|
3500 |
Hjernetrim
Du tror aggregerte funksjoner er enkle. Prøv dette!
Følgende eksempel grupperer medlemmer etter navn, teller det totale antallet betalinger, det gjennomsnittlige betalingsbeløpet og totalsummen av betalingsbeløpene.
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øre eksemplet ovenfor i MySQL arbeidsbenk gir oss følgende resultater.
Sammendrag
- MySQL støtter alle de fem (5) ISO-standard aggregerte funksjonene COUNT, SUM, AVG, MIN og MAX.
- SUM og AVG funksjoner fungerer kun på numeriske data.
- Hvis du vil ekskludere dupliserte verdier fra de samlede funksjonsresultatene, bruker du nøkkelordet DISTINCT. Nøkkelordet ALL inkluderer til og med duplikater. Hvis ingenting er spesifisert, antas ALL som standard.
- Aggregerte funksjoner kan brukes sammen med andre SQL-klausuler som f.eks GRUPPE AV