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

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.

AVG funkce

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Á