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

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.

AVG fungera

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