Agregační funkce jsou o
- Provádění výpočtů na více řádcích
- Jediného sloupce tabulky
- A vrácení jediné hodnoty.
Norma ISO definuje pět (5) agregačních funkcí, jmenovitě;
1) POČET
3) AVG
4) MIN
5) MAX
Proč používat agregační funkce.
Z obchodního hlediska mají různé úrovně organizace odlišné požadavky na informace. Manažeři na nejvyšších úrovních se obvykle zajímají o to, aby věděli celé postavy, a není nutné jednotlivé podrobnosti.
> Agregační funkce nám umožňují snadno vytvářet souhrnná data z naší databáze.
Například z naší databáze myflix může správa vyžadovat následující zprávy
- Nejméně pronajaté filmy.
- Většina vypůjčených filmů.
- Průměrný počet, za který se každý film pronajímá za měsíc.
Nad sestavami snadno vytváříme agregační funkce.
Podívejme se na agregační funkce podrobně.
Funkce COUNT
Funkce COUNT vrací celkový počet hodnot v zadaném poli. Funguje na numerických i nečíselných datových typech. Všechny agregované funkce ve výchozím nastavení vylučují před zpracováním dat hodnoty null.
COUNT (*) je speciální implementace funkce COUNT, která vrací počet všech řádků v zadané tabulce. COUNT (*) zohledňuje také hodnoty Null a duplikáty.
Níže uvedená tabulka zobrazuje data v tabulce movierentals
referenční číslo | Datum transakce | datum návratu | členské číslo | film_id | film_ se vrátil |
---|---|---|---|---|---|
11 | 20-06-2012 | NULA | 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 | NULA | 3 | 3 | 0 |
Předpokládejme, že chceme zjistit, kolikrát byl film s ID 2 pronajat
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
Provedení výše uvedeného dotazu v pracovní ploše MySQL proti myflixdb nám dává následující výsledky.
COUNT('movie_id') |
---|
3 |
DISTINCT Klíčové slovo
Klíčové slovo DISTINCT, které nám umožňuje vynechat duplikáty z našich výsledků. Toho je dosaženo seskupením podobných hodnot dohromady.
Abychom ocenili koncept Distinct, umožníme provést jednoduchý dotaz
SELECT `movie_id` FROM `movierentals`;
movie_id |
---|
1 |
2 |
2 |
2 |
3 |
Nyní provedeme stejný dotaz s odlišným klíčovým slovem -
SELECT DISTINCT `movie_id` FROM `movierentals`;
Jak je uvedeno níže, odlišný vynechá duplicitní záznamy z výsledků.
movie_id |
---|
1 |
2 |
3 |
Funkce MIN
Funkce MIN vrací nejmenší hodnotu v zadaném poli tabulky .
Jako příklad předpokládejme, že chceme znát rok, ve kterém byl vydán nejstarší film v naší knihovně. K získání požadovaných informací můžeme použít funkci MIN MySQL.
Následující dotaz nám to pomůže dosáhnout
SELECT MIN(`year_released`) FROM `movies`;
Provedení výše uvedeného dotazu v pracovní ploše MySQL proti myflixdb nám dává následující výsledky.
MIN('year_released') |
---|
2005 |
Funkce MAX
Jak název napovídá, funkce MAX je opakem funkce MIN. To vrátí největší hodnotu ze zadaného pole tabulky .
Předpokládejme, že chceme získat rok, kdy byl vydán nejnovější film v naší databázi. K tomu můžeme snadno použít funkci MAX.
Následující příklad vrací nejnovější rok vydání filmu.
SELECT MAX(`year_released`) FROM `movies`;
Provedení výše uvedeného dotazu na pracovní ploše MySQL pomocí myflixdb nám dává následující výsledky.
MAX('year_released') |
---|
2012 |
Funkce SUM
Předpokládejme, že chceme přehled, který udává celkovou částku dosud provedených plateb. Můžeme použít funkci MySQL SUM, která vrací součet všech hodnot ve specifikovaném sloupci . SUM funguje pouze na číselných polích . Z vráceného výsledku jsou vyloučeny nulové hodnoty.
V následující tabulce jsou uvedena data v tabulce plateb -
ID platby | členské číslo | datum splatnosti | popis | Částka vyplacená | externí_ reference _číslo |
---|---|---|---|---|---|
1 | 1 | 23-07-2012 | Platba za pronájem filmu | 2500 | 11 |
2 | 1 | 25-07-2012 | Platba za pronájem filmu | 2000 | 12 |
3 | 3 | 30-07-2012 | Platba za pronájem filmu | 6000 | NULA |
Dotaz zobrazený níže získá všechny provedené platby a sečte je, aby vrátil jediný výsledek.
SELECT SUM(`amount_paid`) FROM `payments`;
Provedení výše uvedeného dotazu v pracovní ploše MySQL proti myflixdb poskytuje následující výsledky.
SUM('amount_paid') |
---|
10500 |
Funkce AVG
Funkce MySQL AVG vrací průměr hodnot v zadaném sloupci . Stejně jako funkce SUM funguje pouze na číselné datové typy .
Předpokládejme, že chceme najít průměrnou zaplacenou částku. Můžeme použít následující dotaz -
SELECT AVG(`amount_paid`) FROM `payments`;
Provedení výše uvedeného dotazu v pracovní ploše MySQL nám poskytne následující výsledky.
AVG('amount_paid') |
---|
3500 |
souhrn
- MySQL podporuje všech pět (5) standardních agregačních funkcí ISO COUNT, SUM, AVG, MIN a MAX.
- Funkce SUM a AVG fungují pouze na číselných datech.
- Pokud chcete z výsledků agregační funkce vyloučit duplicitní hodnoty, použijte klíčové slovo DISTINCT. Klíčové slovo ALL zahrnuje i duplikáty. Pokud není zadáno nic, považuje se za výchozí ALL.
- Agregační funkce lze použít ve spojení s dalšími klauzulemi SQL, jako je GROUP BY
Hlavolam
Myslíte si, že agregační funkce jsou snadné. Zkuste to!
Následující příklad seskupuje členy podle názvu, počítá celkový počet plateb, průměrnou částku platby a celkový součet částek plateb.
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`;
Provedení výše uvedeného příkladu v pracovní ploše MySQL nám dává následující výsledky.