Aggregerade funktioner handlar om
- Utföra beräkningar på flera rader
- Av en enda kolumn i en tabell
- Och returnerar ett enda värde.
ISO-standarden definierar fem (5) aggregerade funktioner, nämligen;
1) RÄKNING
3) AVG
4) MIN
5) MAX
Varför använda aggregerade funktioner.
Ur ett affärsperspektiv har olika organisationsnivåer olika informationskrav. Toppnivåchefer är vanligtvis intresserade av att känna till heltal och inte nödvändiga de enskilda detaljerna.
> Aggregerade funktioner 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 på en månad.
Vi producerar enkelt ovanstående rapporter med aggregerade funktioner.
Låt oss titta på aggregerade funktioner i detalj.
COUNT- funktion
COUNT-funktionen 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 nullvärden innan du arbetar med data.
COUNT (*) är en speciell implementering av COUNT-funktionen som returnerar antalet rader i en angiven tabell. COUNT (*) tar också hänsyn till nollar och dubbletter.
Tabellen nedan visar data i filmtabellen
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;
Att utföra ovanstående fråga i MySQL-arbetsbänken mot myflixdb ger oss följande resultat.
COUNT('movie_id') |
---|
3 |
DISTINCT Nyckelord
Sökordet DISTINCT som låter oss utelämna dubbletter från våra resultat. Detta uppnås genom att gruppera liknande värden.
För att uppskatta begreppet Distinct kan vi utföra en enkel fråga
SELECT `movie_id` FROM `movierentals`;
movie_id |
---|
1 |
2 |
2 |
2 |
3 |
Låt oss nu utföra samma fråga med det distinkta nyckelordet -
SELECT DISTINCT `movie_id` FROM `movierentals`;
Som visas nedan utelämnar distinkta dubbletter från resultaten.
movie_id |
---|
1 |
2 |
3 |
MIN- funktion
Funktionen MIN returnerar det minsta värdet i det angivna tabellfältet .
Låt oss som ett exempel anta att vi vill veta året då den äldsta filmen i vårt bibliotek släpptes, vi kan använda MySQLs MIN-funktion för att få önskad information.
Följande fråga hjälper oss att uppnå det
SELECT MIN(`year_released`) FROM `movies`;
Att utföra ovanstående fråga i MySQL-arbetsbänken mot myflixdb ger oss följande resultat.
MIN('year_released') |
---|
2005 |
MAX-funktion
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`;
Att utföra ovanstående fråga i MySQL-arbetsbänk med myflixdb ger oss följande resultat.
MAX('year_released') |
---|
2012 |
SUM- funktion
Antag att vi vill ha en rapport som ger det totala beloppet som gjorts hittills. Vi kan använda funktionen MySQL SUM som returnerar summan av alla värden i den angivna kolumnen . SUM fungerar endast på numeriska fält . Nollvärden exkluderas från det returnerade resultatet.
Följande tabell visar uppgifterna i betalningstabellen-
betalning_ id | medlemsnummer | betalningsdag | beskrivning | betalt belopp | extern_ referens _nummer |
---|---|---|---|---|---|
1 | 1 | 23-07-2012 | Betalning av filmuthyrning | 2500 | 11 |
2 | 1 | 25-07-2012 | Betalning av filmuthyrning | 2000 | 12 |
3 | 3 | 30-07-2012 | Betalning av filmuthyrning | 6000 | NULL |
Frågan som visas nedan hämtar alla betalningar och summerar dem för att ge ett enda resultat.
SELECT SUM(`amount_paid`) FROM `payments`;
Utförande av ovanstående fråga i MySQL-arbetsbänken mot myflixdb ger följande resultat.
SUM('amount_paid') |
---|
10500 |
AVG- funktion
MySQL AVG-funktionen returnerar genomsnittet av värdena i en angiven kolumn . Precis som SUM-funktionen fungerar den bara på numeriska datatyper .
Antag att vi vill hitta det genomsnittliga betalda beloppet. Vi kan använda följande fråga -
SELECT AVG(`amount_paid`) FROM `payments`;
Utförande av ovanstående fråga i MySQL-arbetsbänk ger oss följande resultat.
AVG('amount_paid') |
---|
3500 |
Sammanfattning
- MySQL stöder alla de fem (5) ISO-standardaggregatfunktionerna COUNT, SUM, AVG, MIN och MAX.
- SUM- och AVG-funktionerna fungerar endast på numeriska data.
- Om du vill utesluta dubbla värden från de sammanlagda funktionsresultaten använder du nyckelordet DISTINCT. ALLA nyckelordet innehåller även dubbletter. Om inget specificeras antas ALL som standard.
- Aggregerade funktioner kan användas i kombination med andra SQL-satser som GROUP BY
Hjärngymnastik
Du tycker att aggregerade funktioner är enkla. 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`;
Att genomföra exemplet ovan i MySQL-arbetsbänken ger oss följande resultat.