MySQL Aggregate Functions-zelfstudie: SUM, AVG, MAX, MIN, COUNT, DISTINCT

Anonim

Bij geaggregeerde functies draait het allemaal om

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

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

1) AANTAL

2) SOM
3) GEM
4) MIN
5) MAX

Waarom geaggregeerde functies gebruiken.

Vanuit een zakelijk perspectief hebben verschillende organisatieniveaus verschillende informatie-eisen. Topmanagers zijn meestal geïnteresseerd in het kennen van hele cijfers en niet per se de individuele details.

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

Vanuit onze myflix-database kan het management bijvoorbeeld de volgende rapporten vereisen

  • Minst gehuurde films.
  • De meeste gehuurde films.
  • Gemiddeld aantal dat elke film in een maand verhuurt.

We produceren eenvoudig bovenstaande rapporten met behulp van geaggregeerde functies.

Laten we de geaggregeerde functies in detail bekijken.

COUNT functie

De COUNT-functie retourneert het totale aantal waarden in het opgegeven veld. Het werkt op zowel numerieke als niet-numerieke gegevenstypen. Alle aggregatiefuncties sluiten standaard null-waarden uit voordat ze aan de gegevens werken.

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

De onderstaande tabel toont de gegevens in de tabel movierentals

referentienummer transactie datum retourdatum lidmaatschapsnummer movie_id movie_ is teruggekeerd
11 20-06-2012 NUL 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 NUL 3 3 0

Stel dat we willen weten hoe vaak de film met id 2 is verhuurd

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

Het uitvoeren van de bovenstaande query in MySQL-workbench tegen myflixdb geeft ons de volgende resultaten.

 
COUNT('movie_id')
3

DISTINCT trefwoord

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

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

SELECT `movie_id` FROM `movierentals`;
 
movie_id
1
2
2
2
3

Laten we nu dezelfde zoekopdracht uitvoeren met het distinctieve sleutelwoord -

SELECT DISTINCT `movie_id` FROM `movierentals`;

Zoals hieronder wordt getoond, laat distinct dubbele records weg uit de resultaten.

 
movie_id
1
2
3

MIN- functie

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

Laten we als voorbeeld aannemen dat we willen weten in welk jaar de oudste film in onze bibliotheek is uitgebracht, dan kunnen we de MIN-functie van MySQL gebruiken om de gewenste informatie te krijgen.

De volgende vraag helpt ons daarbij

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

Het uitvoeren van de bovenstaande query in MySQL-workbench tegen myflixdb geeft ons de volgende resultaten.

 
MIN('year_released')
2005

MAX-functie

Zoals de naam suggereert, 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 krijgen waarin de nieuwste film in onze database is uitgebracht. Daarvoor kunnen we eenvoudig de MAX-functie gebruiken.

In het volgende voorbeeld wordt het laatst uitgebrachte filmjaar geretourneerd.

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

Het uitvoeren van de bovenstaande query 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 aantal betalingen dat tot dusver is gedaan. We kunnen de MySQL SUM- functie gebruiken die de som van alle waarden in de opgegeven kolom retourneert . SUM 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 Omschrijving 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 NUL

De onderstaande vraag haalt alle uitgevoerde betalingen op en somt ze op om een ​​enkel resultaat te retourneren.

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

Het uitvoeren van de bovenstaande query in MySQL-workbench tegen de 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 functie SOM, werkt deze alleen op numerieke gegevenstypen .

Stel dat we het gemiddeld betaalde bedrag willen vinden. We kunnen de volgende vraag gebruiken -

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

Het uitvoeren van de bovenstaande query in MySQL-workbench geeft ons de volgende resultaten.

 
AVG('amount_paid')
3500

Overzicht

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

Denkspelletje

U denkt dat geaggregeerde functies eenvoudig zijn. Probeer dit!

Het volgende voorbeeld groepeert leden op naam, telt het totale aantal betalingen, het gemiddelde betalingsbedrag en het totaal van de betalingsbedragen.

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

Het uitvoeren van het bovenstaande voorbeeld in MySQL-workbench geeft ons de volgende resultaten.