Agregátní funkce v MySQL
Agregátní funkce jsou o všem
- Provádění výpočtů na více řádcích
- Z jednoho sloupce tabulky
- A vrací jedinou hodnotu.
Norma ISO definuje pět (5) agregačních funkcí, jmenovitě;
1) POČÍTAT
2) SOUČET
3) AVG
4) MIN
5) MAX
Proč používat agregační funkce
Z obchodního hlediska mají různé úrovně organizace různé požadavky na informace. Vrcholoví manažeři mají obvykle zájem znát celá čísla a nepotřebují jednotlivé detaily.
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ě vypůjčené filmy.
- Nejpůjčovanější filmy.
- Průměrný počet pronajatých filmů za měsíc.
Výše uvedené zprávy snadno vytváříme pomocí agregačních funkcí.
Podívejme se na agregační funkce podrobně.
Funkce COUNT
Funkce COUNT vrací celkový počet hodnot v zadaném poli. Funguje na číselných i nečíselných typech dat. Všechny agregační funkce ve výchozím nastavení vylučují hodnoty null, než budou pracovat s daty.
COUNT (*) je speciální implementace funkce COUNT, která vrací počet všech řádků v zadané tabulce. COUNT (*) také bere v úvahu Nuly a duplikáty.
Níže uvedená tabulka ukazuje údaje v tabulce výpůjček filmů
referenční číslo | Datum transakce | datum návratu | členské číslo | movie_id | film_ se vrátil |
---|---|---|---|---|---|
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 |
Předpokládejme, že chceme zjistit, kolikrát byl film s ID 2 vypůjčen
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
Provedení výše uvedeného dotazu v MySQL ponk 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, spusťte 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 ukázáno níže, zřetelné vynechává duplicitní záznamy z výsledků.
movie_id |
---|
1 |
2 |
3 |
Funkce MIN
Funkce MIN vrátí 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ě, můžeme použít MySQLFunkce MIN pro získání požadovaných informací.
K tomu nám pomůže následující dotaz
SELECT MIN(`year_released`) FROM `movies`;
Provedení výše uvedeného dotazu v MySQL workbench proti myflixdb nám dává následující výsledky.
MIN('year_released') |
---|
2005 |
Funkce MAX
Jak již 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í poslední vydaný filmový rok.
SELECT MAX(`year_released`) FROM `movies`;
Provedení výše uvedeného dotazu v MySQL workbench 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ý uvádí celkovou výši dosud provedených plateb. Můžeme použít MySQL SOUČET funkce, která vrátí součet všech hodnot v zadaném sloupci. SUM funguje pouze na číselných polích. Hodnoty Null jsou vyloučeny z vráceného výsledku.
Následující tabulka ukazuje údaje v tabulce plateb -
id_platby | členské číslo | datum splatnosti | popis | Částka vyplacená | externí_ referenční _čí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 | NULL |
Dotaz uvedený níže získá všechny provedené platby a sečte je, aby se vrátil jediný výsledek.
SELECT SUM(`amount_paid`) FROM `payments`;
Provedení výše uvedeného dotazu v MySQL workbench proti myflixdb dává následující výsledky.
SUM('amount_paid') |
---|
10500 |
AVG funkce
MySQL AVG funkce vrátí průměr hodnot v zadaném sloupci. Stejně jako funkce SUM, to funguje pouze na číselných typech dat.
Předpokládejme, že chceme zjistit 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 MySQL pracovní stůl, nám dává následující výsledky.
AVG('amount_paid') |
---|
3500 |
Hlavolam
Myslíte si, že agregační funkce jsou snadné. Zkuste to!
Následující příklad seskupuje členy podle jména, 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 MySQL workbench nám dává následující výsledky.
Shrnutí
- MySQL podporuje všech pět (5) standardních agregačních funkcí ISO COUNT, SUM, AVG, MIN a MAX.
- SUM a AVG funkce fungují pouze na číselných datech.
- Pokud chcete z výsledků agregovaných funkcí vyloučit duplicitní hodnoty, použijte klíčové slovo DISTINCT. Klíčové slovo ALL zahrnuje i duplikáty. Pokud není nic zadáno, předpokládá se ALL jako výchozí.
- Agregační funkce lze použít ve spojení s jinými klauzulemi SQL, jako je např SKUPINA VYTVOŘENÁ