Geaggregeerde functies in MySQL

Het draait allemaal om geaggregeerde functies

  • Berekeningen uitvoeren op meerdere rijen
  • Van een enkele kolom van een tabel
  • En het retourneren van een enkele waarde.

De ISO-norm definieert vijf (5) aggregatiefuncties, namelijk;

1) AANTAL
2) SOM
3) AVG
4) MIN
5) MAX

Waarom aggregatiefuncties gebruiken

Vanuit een zakelijk perspectief hebben verschillende organisatieniveaus verschillende informatievereisten. Topmanagers zijn doorgaans geïnteresseerd in het kennen van hele getallen en niet noodzakelijkerwijs in de individuele details.

Met geaggregeerde functies kunnen we eenvoudig samengevatte gegevens uit onze database produceren.

Het management kan bijvoorbeeld de volgende rapporten nodig hebben uit onze MyFlix-database:

  • Minst gehuurde films.
  • Meest gehuurde films.
  • Gemiddeld aantal keren dat elke film in een maand wordt verhuurd.

We produceren eenvoudig bovenstaande rapporten met behulp van aggregatiefuncties.

Laten we de geaggregeerde functies in detail bekijken.

AANTAL functie

De functie AANTAL retourneert het totale aantal waarden in het opgegeven veld. Het werkt op zowel numerieke als niet-numerieke gegevenstypen. Alle aggregatiefuncties sluiten standaard nulwaarden uit voordat aan de gegevens wordt gewerkt.

COUNT (*) is een speciale implementatie van de COUNT-functie die het aantal rijen in een opgegeven tabel retourneert. COUNT (*) houdt ook rekening met Nullen en duplicaten.

De onderstaande tabel toont de gegevens in de filmverhuurtabel

referentienummer transactie datum retourdatum lidmaatschapsnummer film_id film_ terug
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

Stel dat we het aantal keren willen weten dat de film met id 2 is verhuurd

SELECT COUNT(`movie_id`)  FROM `movierentals` WHERE `movie_id` = 2;

Voer de bovenstaande query uit in MySQL werkbank tegen myflixdb geeft ons de volgende resultaten.

COUNT('movie_id')
3

VERSCHILLEND trefwoord

VERSCHILLEND trefwoord

Het DISTINCT-trefwoord waarmee we duplicaten uit onze resultaten kunnen weglaten. Dit wordt bereikt door vergelijkbare waarden te groeperen.

Laten we een eenvoudige query uitvoeren om het concept van Distinct te begrijpen

SELECT `movie_id` FROM `movierentals`;

movie_id
1
2
2
2
3

Laten we nu dezelfde zoekopdracht uitvoeren met het afzonderlijke trefwoord:

SELECT DISTINCT `movie_id` FROM `movierentals`;

Zoals hieronder weergegeven, worden dubbele records weggelaten uit de resultaten.

movie_id
1
2
3

MIN-functie

De MIN-functie retourneert de kleinste waarde in het opgegeven tabelveld.

Laten we bijvoorbeeld aannemen dat we willen weten in welk jaar de oudste film in onze bibliotheek is uitgebracht. We kunnen dit gebruiken MySQL's MIN-functie om de gewenste informatie te verkrijgen.

De volgende query helpt ons dat te bereiken

SELECT MIN(`year_released`) FROM `movies`;

Voer de bovenstaande query uit in MySQL workbench tegen myflixdb geeft ons de volgende resultaten.

MIN('year_released')
2005

MAX-functie

Zoals de naam al doet vermoeden, is de MAX-functie het tegenovergestelde van de MIN-functie. Het retourneert de grootste waarde uit het opgegeven tabelveld.

Laten we aannemen dat we het jaar willen hebben waarin de nieuwste film in onze database is uitgebracht. We kunnen eenvoudig de MAX-functie gebruiken om dat te bereiken.

Het volgende voorbeeld retourneert het laatste filmjaar waarin de film is uitgebracht.

SELECT MAX(`year_released`)  FROM `movies`;

Voer de bovenstaande query uit in MySQL workbench met behulp van myflixdb geeft ons de volgende resultaten.

MAX('year_released')
2012

SOM-functie

Stel dat we een rapport willen met het totale bedrag van de tot nu toe gedane betalingen. Wij kunnen gebruik maken van de MySQL SOM functie die retourneert de som van alle waarden in de opgegeven kolom. SOM werkt alleen op numerieke velden. Null-waarden worden uitgesloten van het geretourneerde resultaat.

De volgende tabel toont de gegevens in de betalingstabel:

betalings_id lidmaatschapsnummer betaaldatum beschrijving betaald bedrag extern_referentie_nummer
1 1 23-07-2012 Betaling van filmhuur 2500 11
2 1 25-07-2012 Betaling van filmhuur 2000 12
3 3 30-07-2012 Betaling van filmhuur 6000 NULL

De onderstaande zoekopdracht verzamelt alle gedane betalingen en somt deze op tot één resultaat.

SELECT SUM(`amount_paid`) FROM `payments`;

Voer de bovenstaande query uit in MySQL workbench tegen myflixdb geeft de volgende resultaten.

SUM('amount_paid')
10500

AVG functie

MySQL AVG functie retourneert het gemiddelde van de waarden in een opgegeven kolom. Net als de SUM-functie is het werkt alleen op numerieke gegevenstypen.

Stel dat we het gemiddelde betaalde bedrag willen vinden. We kunnen de volgende query gebruiken:

SELECT AVG(`amount_paid`)  FROM `payments`;

Voer de bovenstaande query uit in MySQL workbench, geeft ons de volgende resultaten.

AVG('amount_paid')
3500

Denkspelletje

Je denkt dat aggregatiefuncties eenvoudig zijn. Probeer dit!

In het volgende voorbeeld worden leden gegroepeerd op naam, wordt het totale aantal betalingen, het gemiddelde betalingsbedrag en het totaalbedrag van de betalingen geteld.

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`;

Voer het bovenstaande voorbeeld uit in MySQL workbench geeft ons de volgende resultaten.

AVG functie

Samenvatting

  • MySQL ondersteunt alle vijf (5) ISO-standaard aggregatiefuncties COUNT, SOM, AVG, MIN en MAX.
  • SOM en AVG functies werken alleen op numerieke gegevens.
  • Als u dubbele waarden wilt uitsluiten van de geaggregeerde functieresultaten, gebruikt u het trefwoord DISTINCT. Het trefwoord ALL bevat zelfs duplicaten. Als er niets is opgegeven, wordt ALL als standaard aangenomen.
  • Aggregaatfuncties kunnen worden gebruikt in combinatie met andere SQL-clausules, zoals GROEP DOOR