SQL GROUP BY

SQL GROUP BY

Klauzula SQL GROUP BY sa používa na usporiadanie identických údajov do skupín na základe jedného alebo viacerých stĺpcov. Bežne sa používa s agregačnými funkciami ako COUNT() SUM() AVG() MAX() a MIN() na vykonávanie výpočtov pre každú skupinu údajov.

ovocie_obrázok

Príklad: Najprv budeme vytvoriť demo SQL databázu a tabuľku, na ktorej použijeme príkaz GROUP BY.

zamestnancov

dotaz:

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

výstup:

Skupina po dotaze

Syntax:

 SELECT column1 aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1 column2;  
  • agregovaná_funkcia: funkcia používaná na agregáciu napr. SUM() AVG() COUNT().
  • table_name: názov tabuľky, z ktorej sa vyberajú údaje.
  • podmienka: Voliteľná podmienka na filtrovanie riadkov pred zoskupením (používa sa s WHERE).
  • stĺpec1 stĺpec2: Stĺpce, na ktoré sa použije zoskupenie.

Príklady GROUP BY

Predpokladajme, že máme študentskú tabuľku. Do tejto tabuľky vložíme niekoľko vzorových údajov a potom vykonáme operácie pomocou GROUP BY, aby sme pochopili, ako zoskupuje riadky na základe stĺpca a agreguje údaje.

grp

Príklad 1: Zoskupenie podľa jedného stĺpca

Keď zoskupíme podľa jedného stĺpca, skombinujú sa riadky s rovnakou hodnotou v tomto stĺpci. Napríklad zoskupenie podľa predmetov ukazuje, koľko študentov je zapísaných v každom predmete.

dotaz:

 SELECT subject COUNT(*) AS Student_Count FROM Student GROUP BY subject;  

výstup:

grp-1

Vysvetlenie: Každý predmet sa v tabuľke zobrazí dvakrát, takže počet anglických matematikov a prírodných vied je 2.

Príklad 2: Zoskupenie podľa viacerých stĺpcov

Použitie GROUP BY s viacerými stĺpcami zoskupí riadky, ktoré majú v týchto stĺpcoch rovnaké hodnoty. Napríklad zoskupenie podľa predmetu a ročníka spojí riadky s rovnakým párom predmet – ročník a môžeme spočítať, koľko študentov patrí do každej skupiny.

dotaz:

 SELECT subject year COUNT(*) FROM Student GROUP BY subject year;  

výstup:

študenti-grp

Vysvetlenie: Žiaci s rovnakým predmetom a ročníkom sú zoskupení. Keďže každý pár predmet-rok sa vyskytuje dvakrát, počet je 2 pre každú skupinu.

Klauzula HAVING v klauzule GROUP BY

Klauzula HAVING sa používa na filtrovanie výsledkov po zoskupení, najmä pri práci s agregovanými funkciami ako SUM() COUNT() alebo AVG(). Na rozdiel od WHERE aplikuje podmienky na zoskupené dáta.

emp

Príklad 1: Filter podľa celkovej mzdy

V tomto dotaze zoskupujeme zamestnancov podľa mena a zobrazujeme len tých, ktorých celkový plat je vyšší ako 50 000.

 SELECT NAME SUM(sal) FROM Emp GROUP BY name HAVING SUM(sal)>50000;   

Výstup

vek-1

Vysvetlenie : Vo výsledku sa objavia iba zamestnanci, ktorých celková mzda presahuje 50 000.

Príklad 2: Filter podľa priemernej mzdy

V tomto dopyte zoskupujeme zamestnancov podľa veku a zobrazujeme len tie vekové skupiny, ktorých priemerná mzda je vyššia ako 60 000.

 SELECT age AVG(sal) AS Average_Salary FROM emp GROUP BY age HAVING AVG(sal) > 60000;  

výstup:

výstup-1

Vysvetlenie: Tento dotaz zoskupuje zamestnancov podľa veku a vypočítava priemernú mzdu pre každý vek. Zobrazia sa len tie vekové skupiny, ktorých priemerný plat je vyšší ako 60 000.

Vytvoriť kvíz