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

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.

AVG funktion

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

Opsummer dette indlรฆg med: