Klauzule SQL GROUP BY se používá k uspořádání identických dat do skupin na základě jednoho nebo více sloupců. Běžně se používá s agregačními funkcemi jako COUNT() SUM() AVG() MAX() a MIN() k provádění výpočtů pro každou skupinu dat.
Příklad: Nejprve budeme vytvořit ukázkovou SQL databázi a tabulku, na které použijeme příkaz GROUP BY.
Dotaz:
SELECT Department SUM(Salary) AS TotalSalary FROM Employees GROUP BY Department;výstup:
Syntax:
SELECT column1 aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1 column2;- agregační_funkce: funkce používaná pro agregaci např. SUM() AVG() COUNT().
- název_tabulky: název tabulky, ze které se vybírají data.
- stav: Volitelná podmínka pro filtrování řádků před seskupením (používá se s WHERE).
- sloupec1 sloupec2: Sloupce, na které je seskupení použito.
Příklady GROUP BY
Předpokládejme, že máme tabulku Student. Do této tabulky vložíme některá ukázková data a poté provedeme operace pomocí GROUP BY, abychom pochopili, jak seskupuje řádky na základě sloupce a agreguje data.
Příklad 1: Seskupit podle jednoho sloupce
Když seskupíme podle jednoho sloupce, spojí se řádky se stejnou hodnotou v tomto sloupci. Například seskupení podle předmětu ukazuje, kolik studentů je zapsáno v každém předmětu.
Dotaz:
SELECT subject COUNT(*) AS Student_Count FROM Student GROUP BY subject;výstup:
Vysvětlení: Každý předmět se v tabulce objeví dvakrát, takže počet pro anglickou matematiku a přírodní vědy je 2.
Příklad 2: Seskupit podle více sloupců
Použití GROUP BY s více sloupci seskupuje řádky, které v těchto sloupcích sdílejí stejné hodnoty. Například seskupení podle předmětu a ročníku spojí řádky se stejnou dvojicí předmět–ročník a můžeme spočítat, kolik studentů spadá do každé skupiny.
Dotaz:
SELECT subject year COUNT(*) FROM Student GROUP BY subject year;výstup:
Vysvětlení: Studenti se stejným předmětem a ročníkem jsou seskupeni. Vzhledem k tomu, že se každý pár předmět–rok vyskytuje dvakrát, počet je 2 pro každou skupinu.
Klauzule HAVING v klauzuli GROUP BY
Klauzule HAVING se používá k filtrování výsledků po seskupení, zejména při práci s agregačními funkcemi, jako je SUM() COUNT() nebo AVG(). Na rozdíl od WHERE aplikuje podmínky na seskupená data.
Příklad 1: Filtrování podle celkového platu
V tomto dotazu seskupujeme zaměstnance podle jména a zobrazujeme pouze ty, jejichž celkový plat je větší než 50 000.
SELECT NAME SUM(sal) FROM Emp GROUP BY name HAVING SUM(sal)>50000; Výstup
Vysvětlení : Ve výsledku se objeví pouze zaměstnanci, jejichž celkový plat přesahuje 50 000.
Příklad 2: Filtrování podle průměrné mzdy
V tomto dotazu seskupujeme zaměstnance podle věku a zobrazujeme pouze ty věkové skupiny, kde je průměrná mzda vyšší než 60 000.
SELECT age AVG(sal) AS Average_Salary FROM emp GROUP BY age HAVING AVG(sal) > 60000;výstup:
Vysvětlení: Tento dotaz seskupuje zaměstnance podle věku a vypočítává průměrnou mzdu pro každý věk. Jsou zobrazeny pouze ty věkové skupiny, kde je průměrný plat vyšší než 60 000.
Vytvořit kvíz