Agregační funkce

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Agregační funkce je pojem z oboru matematické analýzy, který se používá k popisu operace přiřazení hodnoty z množiny prvků na jedinečný prvek – agregát. Agregační funkce je definována jako zobrazení, které každé neprázdné podmnožině dané množiny přiřazuje její agarégát. Existuje několik typů agregačních funkcí, jako například minimum, maximum, průměr, součet či medián. Tyto funkce se často používají v matematice, statistice, databázích a dalších oborech, kde je třeba agregovat data. Agregační funkce umožňují zpracování velkého množství dat a získání jednoduchého a přehledného výsledku. V článku jsou také uvedeny vlastnosti agregačních funkcí, jako je asociativita a komutativita, které jsou důležité pro správné fungování a používání těchto funkcí. Dále se dozvíte o konkrétních příkladech agregačních funkcí v matematických operacích, statistice a ve výpočetní technice. Agregační funkce jsou důležitým nástrojem pro analýzu dat a získávání přehledu o velkém množství informací. Je důležité je správně používat a pochopit jejich vlastnosti, abychom mohli získat významné a spolehlivé výsledky.

Agregační funkce jsou v SQL statistické funkce, pomocí kterých systém řízení báze dat umožňuje seskupit vybrané řádky dotazu (získané příkazem SELECT) a spočítat nad nimi výsledek určité aritmetické nebo statistické funkce. Agregační funkce se v SQL používají s konstrukcí GROUP BY.

Agregace

Při výběru řádků z tabulky (nebo tabulek) většina databázových strojů relačních databází dovoluje výsledné řádky seskupit (agregovat) podle zadaného sloupce nebo výrazu z nich složeného pomocí syntaktické konstrukce GROUP BY. Při použití této konstrukce lze získat i výsledek některých statistických funkcí (nejčastěji je to aritmetický průměr, minimum, maximum, složitější, tzv. +more populační funkce, směrodatné odchylky a variance; nebo naopak obyčejný součet či počet řádků, které byly pod každou jednotlivou hodnotou seskupeny). GROUP BY lze výjimečně vynechat, např. pro vypsání výsledku agregační funkce jednoho sloupce nad celou tabulkou.

Vícenásobné seskupení

Databázové stroje většinou podporují i vícenásobné seskupení / seskupení podle více sloupců (nebo výrazů z nich složených). V takovém případě se názvy sloupců za klíčovým slovem GROUP BY oddělují čárkou. +more Sloupec (nebo výraz) uvedený jako první má nejvyšší prioritu, poslední sloupec nebo výraz má prioritu nejnižší.

Nejčastější agregační funkce

Následující tabulka popisuje zkratky pro nejběžnější agregační funkce. Podpora těch ostatních může být závislá na konkrétním databázovém systému; taktéž zkratky se mohou lišit.

NázevPopis
AVGAritmetický průměr
SUMSoučet
COUNTPočet
MINMinimum
MAXMaximum
* Uvnitř závorek se předpokládá použití některého z polí z tabulky, popř. hvězdička (*), reprezentující celý řádek. +more * Povolené jsou také výrazy z názvů polí i literálů, interních a uživatelských funkcí. * Naopak, většina databází jako parametr agregační funkce nepodporuje poddotazy.

COUNT

Funkce COUNT se od ostatních agregačních funkcí v několika věcech odlišuje: * Zatímco ostatní svůj výsledek vrací nad specifikovanými sloupci nebo výrazy z nich, COUNT vrací počet záznamů, které vyhovují zadané podmínce resp. seskupení, a proto je jedno, který ze sloupců má jako argument (a často se používá hvězdičková konvence). +more * Výjimkou výše uvedeného bodu je případ, kdy je potřeba vrátit počet unikátních hodnot určitého sloupce použitého v tabulce. Pak se ke COUNT přidává klíčové slovo DISTINCT:.

Příklad:

SELECT COUNT(DISTINCT zeme) FROM navstevnici; -- Z kolika zemí přicházejí návštěvníci?

* V případech, že nebyl nalezen ani jeden odpovídající řádek, COUNT vrátí nulu (ostatní agregační funkce vrací hodnotu NULL). * COUNT může být v SQL voláno bez konstrukce GROUP BY. +more Touto výjimkou je SQL dotaz nad celou tabulkou (např. dotaz na maximální hodnotu určitého sloupce z celé tabulky), který vrací toliko jeden řádek:.

SELECT COUNT(*) FROM zamestnanci; -- Vrať počet řádků v tabulce `zamestnanci`.

Některé databázové systémy mají počet položek svých tabulek uloženy zvlášť, takže pokud není dotaz tohoto typu nijak dále omezen (jako ve výše uvedeném příkladu), „sáhnou“ si pro výsledek do informací o tabulce a k jejímu procházení vůbec nedojde (což se pozitivně projeví na rychlosti a zátěži na paměťové médium).

SUM

Funkce SUM vrací sumaci vybraných řádků. Je-li jejich počet nulový, je vrácena nikoli nula, ale hodnota NULL. +more Pro SUM umožňuje řada databázových systémů použít také logické (pravdivostní) výrazy (z Booleovy algebry - např. výsledky rovnosti, nerovnosti, apod. ), u kterých vrací jedničku pro „pravdu“ a nulu pro „nepravdu“. Takto lze zjistit počet řádků v tabulce, jejichž prvky splňují zadanou podmínku.

GROUP_CONCAT

GROUP_CONCAT je speciální agregační funkce, kterou nabízejí některé databázové systémy (mezi nimi například MySQL). Jejím výsledkem je nikoli počet ale výčet nalezených hodnot, oddělených čárkou nebo jiným oddělovačem. +more Pro různé číselníky apod. tak může být GROUP_CONCAT velice užitečná - bez ní by bylo potřeba hodnoty vybrat jiným SQL dotazem, výsledek projít záznam po záznamu a hodnoty zapsat jednu za druhou do pomocné řetězcové proměnné. U příliš obsáhlých tabulek může ovšem výsledek přesahovat maximum toho, co databázový systém může vrátit, a je třeba na to dávat pozor. Jako u COUNT i u této funkce lze GROUP_CONCAT kombinovat s klíčovým slovem DISTINCT pro eliminaci vícekrát se vyskytujících hodnot. Navíc lze výčet seřadit (vložením klauzule ORDER BY) a též si přizpůsobit formát výpisu specifikováním jiného oddělovače než výchozí čárky (uvedeným v klauzuli SEPARATOR).

Příklad:

SELECT student_name, GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ') FROM student GROUP BY student_name; -- Z tabulky studentů vypíše jméno a unikátní skóre, seřazené sestupně, oddělené mezerou.

HAVING

Konstrukce HAVING, za kterou následují omezující podmínky, umožňuje omezit řádky, které jsou zpracovány agregační funkcí. Je tedy možné ji použít jako náhradu za konstrukci WHERE, kde agregační funkce nejsou povoleny. +more Návrh SQL používá dvě různé konstrukce pro omezující podmínky podle přítomnosti agregačních funkcí proto, že agregovaný výběr se od toho běžného liší (použitím rozdílných postupů, algoritmů, výkonem, atd. ). Omezující podmínky konstrukce HAVING obsahující alespoň jednu agregační funkci musejí být uvedeny až za GROUP BY.

Syntaxe HAVING:

SELECT zeme, COUNT(*) AS Pocet FROM zamestnanci GROUP BY zeme HAVING COUNT(*)>1

Časté chyby: Záměna HAVING A WHERE

Často dochází k zámeně konstrukcí HAVING a WHERE a agregační funkce je napsána do WHERE. Podívejme se na následující skript:

SELECT zeme, COUNT(*) AS Pocet FROM zamestnanci WHERE COUNT(*)>1 GROUP BY zeme

Výsledkem skriptu bude chyba. Důvodem je logické zpracování dotazu (tzv. +more logical query prosessing), kdy je konstrukce WHERE zpracována dříve než GROUP BY. Snažíme se tedy seskupit řádky na základě agregační funkce, která ještě není spočítána.

Agregační funkce a NULL

Hodnota NULL je absorpční prvek pro statistické agregační funkce jako Min, Max, Avg, a další. To znamená, že pokud se ve výběru, ze kterého se agregační funkce počítá, vyskytne NULL, výsledek je pak vždy NULL. +more * Pro funkci Count je důležitý počet řádků, nikoli, zdali hodnota jejího parametru nabývá NULL, vrací tedy vždy číslo. * Agregační funkce s výjimkou Count vracejí NULL, pokud počet řádků, které pro ně byl vybrán, je nulový. * NULL se objevuje i na pozici agregovaného sloupce nebo výrazu v dotazu s konstrukcí GROUP BY (výraz) WITH ROLLUP, kde NULL reprezentuje všechny předtím vybrané případy dohromady.

Reference

Externí odkazy

[url=http://interval. cz/clanky/sql-dotazy-s-agregaci/]SQL dotazy s agregací[/url], interval. +morecz * [url=http://www. zive. cz/default. aspx. article=4641]SQL - Co jsou to ty agregace. [/url], Živě. cz * [url=http://dev. mysql. com/doc/refman/5. 0/en/group-by-functions. html]Agregační funkce[/url] pro MySQL (anglicky) * [url=http://biportal. cz/sql-having-vs-where/]Rozdíl mezi HAVING a WHERE klauzulí[/url].

Kategorie:SQL

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top