Úvod do klauzuly GROUP BY v SQL
V prípadoch, keď potrebujeme zoskupiť riadky s rovnakou hodnotou, sa do obrázka dostane klauzula Group By. Klauzula GROUP BY je príkaz v SQL, ktorý vykoná túto operáciu.
Dôležité je zapamätať si, že klauzula GROUP BY sa používa v príkaze SELECT v dotaze po použití klauzuly WHERE.
syntax
Syntax pre klauzulu Group By je -
SELECT column_name1, column_name2, …
FROM table_name
WHERE conditions
GROUP By column_name1, column_name2, …
ORDER By column_name1, column_name2, …;
Vysvetlenie syntaxe
- Príkaz SELECT - príkazový príkaz SQL
- table_name - názov uvádzanej databázovej tabuľky
- podmienky - pozri podmienky, ktoré sa majú skontrolovať
- GROUP BY - klauzula na zoskupenie rovnakých riadkov
- OBJEDNÁVKA - vždy sa používa po klauzuli Group By na usporiadanie riadkov vo vzostupnom alebo zostupnom poradí. Toto je voliteľná podmienka.
Ako GROUP BY Clause funguje v SQL?
Aby sme pochopili fungovanie klauzuly Group By, vezmime si príklad. Zoberme si tabuľku s menom ako ZAMESTNANCA, ktorá obsahuje základné údaje o zamestnancovi, ako je meno, vek, telefónne číslo, dob, pohlavie, adresa, e-mailové identifikačné číslo atď.
Tabuľka zamestnancov
názov | Vek | telefón | rod | |
John | 23 | 123 | Muž | |
Smieť | 22 | 456 | Žena | |
ana | 45 | 644 | Žena | |
hrnca | 57 | 3456 | Žena | |
Res | 45 | 456 | Žena | |
opálenie | 78 | 2456 | Muž | |
Ran | 34 | 5899 | Muž | |
wan | 55 | 7789 | Žena | |
tung | 32 | 5689 | Muž | |
Chung | 21 | 4678 | Muž |
Zoberme si, že EMPLOYEE má okolo 10 záznamov.
Najprv získajme z tejto tabuľky rôzne hodnoty „pohlavia“. Dotaz, ktorý nám pomôže dosiahnuť náš cieľ, bude -
SELECT gender FROM EMPLOYEE;
Takto získate nasledujúce hodnoty -
rod |
Muž |
Žena |
Žena |
Žena |
Žena |
Muž |
Muž |
Žena |
Muž |
Muž |
Problém je tu nadbytočnosť hodnôt, tj ako vidíme, že v tabuľke sú iba dve jedinečné hodnoty pohlaví, ale výstup nám nielen dáva jedinečné hodnoty, ale všetky hodnoty, aj keď sa opakujú.
Aby sme z tabuľky dostali iba jedinečné hodnoty, použijeme nasledujúci dotaz -
SELECT gender FROM EMPLOYEE GROUP BY gender;
Výsledok, ktorý dostaneme po vykonaní tohto dotazu, bude -
rod |
Muž |
Žena |
Group By zoskupí všetky rovnaké hodnoty do riadkov spolu a vráti im iba jeden záznam alebo jeden riadok, ako to urobil s riadkami „Male“ a „Female“ v tabuľke. Výsledkom boli iba dve jedinečné hodnoty, ktoré boli prítomné v stĺpci „pohlavie“ i, napr. Žena a muž.
Vezmime teraz ďalší príklad tabuľky, ktorá obsahuje podrobnosti o oddelení, s ktorým je každý z týchto zamestnancov spojený. Nazývame to tabuľkou Employee_Department.
Tabuľka oddelenia zamestnancov
názov | hod | oddelenie |
John | hod1 | služba |
Smieť | hod2 | financie |
ana | hod1 | služba |
hrnca | hod2 | financie |
Res | hod3 | technológie |
opálenie | hod5 | podpora |
Ran | hod3 | služba |
wan | hod3 | technológie |
tung | hod3 | financie |
Chung | hod5 | HR |
Teraz vykonajme nasledujúci dotaz a hľadaj výsledok -
SELECT hod, department FROM Employee_Department GROUP BY hod, department;
Vykonanie tohto dotazu vyvolá nasledujúci výsledok -
hod | oddelenie |
hod1 | služba |
hod2 | financie |
hod3 | technológie |
hod5 | podpora |
hod3 | služba |
hod3 | financie |
hod5 | HR |
Klauzula GROUP BY funguje tak na hod, ako aj na oddelení, aby vyhľadala jedinečné riadky vo vyššie uvedenom scenári. Skontroluje kombináciu hod a oddelenia proti iným záznamom hod a oddelenia, aby identifikoval jeho jedinečnosť. Ak je hod rovnaký, ale oddelenie je iné, potom sa tento riadok považuje za jedinečný. Ak sú hod a oddelenie rovnaké pre viac ako jeden riadok, duplikát sa nevytvorí a zobrazí sa iba jeden riadok.
Operácie klauzúl GROUP BY
Môžeme použiť klauzulu Group By s niekoľkými zoskupovacími a agregovanými funkciami. Vezmime si niekoľko príkladov pomocou vyššie uvedených dvoch tabuliek, tj EMPLOYEE a Employee_Department.
Príklad č. 1
Získanie počtu mužov a žien vo firme.
SELECT gender, COUNT(`name`) FROM EMPLOYEE GROUP BY gender;
Vykonanie tohto dotazu vyvolá nasledujúci výsledok -
Count ( 'name') | rod |
5 | Muž |
5 | Žena |
Príklad č. 2
Získanie počtu oddelení v spoločnosti v zostupnom poradí podľa počtu.
SELECT department, COUNT(`name`) FROM Employee_Department GROUP BY department ORDER BY COUNT(name) DESC;
Vykonanie tohto dotazu vyvolá nasledujúci výsledok -
Count ( 'name') | oddelenie |
3 | služba |
3 | financie |
2 | technológie |
1 | podpora |
1 | HR |
Príklad č. 3
Získanie počtu rôznych oddelení pod rovnakou hodinou v spoločnosti v zostupnom poradí podľa počtu.
SELECT hod, department, COUNT(`name`) FROM Employee_Department GROUP BY hod, department ORDER BY COUNT(name) DESC;
Vykonanie tohto dotazu vyvolá nasledujúci výsledok -
Count ( 'name') | hod | oddelenie |
2 | hod1 | služba |
2 | hod2 | financie |
2 | hod3 | technológie |
1 | hod5 | podpora |
1 | hod3 | služba |
1 | hod3 | financie |
1 | hod5 | HR |
Klauzula HAVING v SQL
Použitie klauzuly HAVING s klauzulami Group By obmedzí výsledok dotazu na riadky, ktorých hodnota je uvedená v klauzule Having.
Pochopenie tohto príkladu uľahčí -
Príklad č. 4
SELECT * FROM EMPLOYEE GROUP BY gender HAVING gender = “Female”;
Vykonanie tohto dotazu vyvolá nasledujúci výsledok -
názov | Vek | telefón | rod | |
Smieť | 22 | 456 | Žena | |
ana | 45 | 644 | Žena | |
hrnca | 57 | 3456 | Žena | |
Res | 45 | 456 | Žena | |
wan | 55 | 7789 | Žena |
Príklad č. 5
SELECT * FROM Employee_Department GROUP BY department HAVING department = “Finance”;
Vykonanie tohto dotazu vyvolá nasledujúci výsledok -
názov | hod | oddelenie |
Smieť | hod2 | financie |
hrnca | hod2 | financie |
tung | hod3 | financie |
záver
Použitím klauzuly GROUP BY s príkazom SELECT môžeme zoskupiť riadky s rovnakými hodnotami spolu s použitím agregačných funkcií, konštánt a výrazov.
Odporúčané články
Toto je príručka k klauzuli GROUP BY v SQL. Tu diskutujeme o tom, ako GROUP BY Clause pracuje v SQL pomocou príkladov a zamestnaneckých tabuliek. Ďalšie informácie nájdete aj v nasledujúcich článkoch -
- SQL Vložiť dotaz
- Zobrazenia SQL
- Databáza v SQL
- Transakcie v SQL