GROUP BY

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

GROUP BY je syntaktická konstrukce jazyka SQL pro agregaci záznamů vybíraných pomocí příkazu SELECT.

Příklad použití: Máme tabulku článků a u každého z nich je mj. uložen i rok, kdy byl napsán. Chceme získat přehled toho, kolik článků bylo napsáno který rok.

SELECT rok,Count(*) FROM clanky GROUP BY rok;

Výstupem by mohlo být např.:

+------+----------+ | rok | Count(*) | +------+----------+ | 2006 | 7 | | 2007 | 15 | | 2008 | 22 | +------+----------+

Další vlastnosti

GROUP BY a agregační funkce

Použití GROUP BY nabízí možnost volat tzv. agregační funkce. +more Nejběžnější použití je získání počtu záznamů odpovídající každé jednotlivé hodnotě jiného sloupce (v tomto případě roku), časté je také získání součtu, aritmetického průměru či jiných statistických hodnot z vybíraných záznamů.

HAVING

Pokud chceme výpis s GROUP BY ještě nějak dodatečně omezit, nelze použít klausuli WHERE, neboť ta s agregačními funkcemi nepočítá; je proto nutno použít speciální klíčové slovo a to HAVING, za kterým můžeme definovat podmínku, která operuje s agregačními funkcemi.

WITH ROLLUP

Několik málo databázových systémů (jako např. MySQL) podporuje navíc konstrukci WITH ROLLUP, která se umisťuje za klausuli GROUP BY. +more Výpis s konstrukcí WITH ROLLUP způsobí, že za standardním výpisem se objeví řádek s hodnotou NULL na místo sloupce, podle kterého jsou data agregována (je-li uveden), který znamená celkový údaj a na místě hodnoty agregační funkce pak hodnota za všechny právě uvedené výsledky těchto funkcí - např. pro počet (Count) je to počet všech výskytů, pro součet (Sum) je to celkový součet (grand total) atp.

Pro výše uvedený příklad by tedy dotaz

SELECT rok,Count(*) FROM clanky GROUP BY rok WITH ROLLUP;

vygeneroval výstup podobný tomuto:

+------+----------+ | rok | Count(*) | +------+----------+ | 2006 | 7 | | 2007 | 15 | | 2008 | 22 | | NULL | 44 | +------+----------+

Hodnota NULL v posledním řádky zde tedy reprezentuje souhrnný údaj pro všechny roky. Agregovaných sloupců nebo výrazů z nich může být i víc - v tom případě do výstupu výběru budou jako NULL začleněny souhrnné hodnoty pro sloupce v opačném pořadí, než které bylo uvedeno za klauzulí GROUP BY.

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