logo

SQL GROUP BY

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.

ovoce_obrázek' title=

Příklad: Nejprve budeme vytvořit ukázkovou SQL databázi a tabulku, na které použijeme příkaz GROUP BY.

Zaměstnanci' loading='lazy' title=

Dotaz:



SELECT Department SUM(Salary) AS TotalSalary FROM Employees GROUP BY Department;

výstup:

Skupina po dotazu' loading='lazy' title=

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.

grp' loading='lazy' title=

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:

grp-1' loading='lazy' title=

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:

studenti-grp' loading='lazy' title=

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.

emp' loading='lazy' title=

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

věk-1' loading='lazy' title=

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:

výstup-1' loading='lazy' title=

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