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