Úvod do klauzule GROUP BY v SQL
Pro případy, kdy potřebujeme seskupit řádky se stejnou hodnotou Klauzule Group By přichází na obrázek. Klauzule GROUP BY je příkaz v SQL, který provede tuto operaci.
Zde je důležité si pamatovat, že klauzule GROUP BY se používá v příkazu SELECT v dotazu po použití klauzule WHERE.
Syntax
Syntaxe klauzule 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, …;
Vysvětlení syntaxe
- Příkaz SELECT - dotaz na příkaz SQL
- table_name - název odkazované databázové tabulky
- podmínky - viz podmínky, které mají být zkontrolovány
- GROUP BY - klauzule pro seskupení stejných řádků dohromady
- OBJEDNÁVKA BY - vždy se používá po klauzuli Group By k uspořádání řádků ve vzestupném nebo sestupném pořadí. Toto je volitelná podmínka.
Jak GROUP BY Clause funguje v SQL?
Abychom pochopili fungování klauzule Group By, vezměme si příklad. Zvažte tabulku se jménem jako ZAMĚSTNANCI, která obsahuje základní údaje o zaměstnanci, jako je jméno, věk, telefonní číslo, dob, pohlaví, adresa, e-mailové ID atd.
Tabulka zaměstnanců
název | stáří | telefon | Rod | e-mailem |
John | 23 | 123 | mužský | |
Smět | 22 | 456 | ženský | |
Ana | 45 | 644 | ženský | |
Hrnce | 57 | 3456 | ženský | |
Res | 45 | 456 | ženský | |
Opálení | 78 | 2456 | mužský | |
Běžel | 34 | 5899 | mužský | |
Wan | 55 | 7789 | ženský | |
Tung | 32 | 5689 | mužský | |
Chung | 21 | 4678 | mužský |
Zvažte, že má EMPLOYEE asi 10 položek.
Nejprve si z této tabulky získáme různé hodnoty „pohlaví“. Dotaz, který nám pomůže dosáhnout našeho cíle, bude -
SELECT gender FROM EMPLOYEE;
To nám poskytne následující hodnoty -
Rod |
mužský |
ženský |
ženský |
ženský |
ženský |
mužský |
mužský |
ženský |
mužský |
mužský |
Problém je zde nadbytečnost hodnot, tj. Jak vidíme, jsou v tabulce pouze dvě jedinečné hodnoty pohlaví, ale výstup nám nejen dává jedinečné hodnoty, ale všechny hodnoty, i když se opakují.
Abychom z tabulky získali pouze jedinečné hodnoty, použijeme následující dotaz -
SELECT gender FROM EMPLOYEE GROUP BY gender;
Výsledek, který obdržíme po provedení tohoto dotazu, bude -
Rod |
mužský |
ženský |
Group By spojí všechny stejné hodnoty v řádcích dohromady a vrátí jim pouze jeden záznam nebo jediný řádek, jako tomu bylo v řádcích „Male“ a „Female“ v tabulce. Výsledkem byly pouze dvě jedinečné hodnoty, které byly přítomny ve sloupci „gender“ i, e. Žena a muž.
Nyní si vezměme další příklad tabulky, která obsahuje podrobnosti o oddělení, ke kterému je každý z těchto zaměstnanců přidružen. Budeme to nazývat tabulkou Employee_Department.
Tabulka oddělení zaměstnanců
název | hod | oddělení |
John | hod1 | Služba |
Smět | hod2 | Finance |
Ana | hod1 | Služba |
Hrnce | hod2 | Finance |
Res | hod3 | Tech |
Opálení | hod5 | Podpěra, podpora |
Běžel | hod3 | Služba |
Wan | hod3 | Tech |
Tung | hod3 | Finance |
Chung | hod5 | HR |
Nyní tedy provedeme níže uvedený dotaz a hledáme výsledek -
SELECT hod, department FROM Employee_Department GROUP BY hod, department;
Provedení tohoto dotazu vyvolá následující výsledek -
hod | oddělení |
hod1 | Služba |
hod2 | Finance |
hod3 | Tech |
hod5 | Podpěra, podpora |
hod3 | Služba |
hod3 | Finance |
hod5 | HR |
Klauzule GROUP BY funguje jak na hod, tak na oddělení, aby hledala jedinečné řádky ve výše uvedeném scénáři. Zkontroluje kombinaci hod a oddělení proti ostatním záznamům hod a oddělení, aby identifikoval jeho jedinečnost. Pokud je hod stejný, ale oddělení je jiné, pak se s tímto řádkem zachází jako s jedinečným. Pokud jsou hod a oddělení stejné pro více než jeden řádek, duplicitní záznam se nevytvoří a zobrazí se pouze jeden řádek.
GROUP BY Klauzule operace
Můžeme použít klauzuli Group By s několika seskupovacími a agregačními funkcemi. Vezměme si několik příkladů pomocí výše uvedených dvou tabulek, tj. EMPLOYEE a Employee_Department.
Příklad č. 1
Získání počtu mužských a ženských zaměstnanců ve společnosti.
SELECT gender, COUNT(`name`) FROM EMPLOYEE GROUP BY gender;
Provedení tohoto dotazu vyvolá následující výsledek -
COUNT ('jméno') | Rod |
5 | mužský |
5 | ženský |
Příklad č. 2
Získání počtu oddělení ve společnosti v sestupném pořadí podle počtu.
SELECT department, COUNT(`name`) FROM Employee_Department GROUP BY department ORDER BY COUNT(name) DESC;
Provedení tohoto dotazu vyvolá následující výsledek -
COUNT ('jméno') | oddělení |
3 | Služba |
3 | Finance |
2 | Tech |
1 | Podpěra, podpora |
1 | HR |
Příklad č. 3
Získávání počtu různých oddělení pod stejnou hod ve společnosti v sestupném pořadí podle počtu.
SELECT hod, department, COUNT(`name`) FROM Employee_Department GROUP BY hod, department ORDER BY COUNT(name) DESC;
Provedení tohoto dotazu vyvolá následující výsledek -
COUNT ('jméno') | hod | oddělení |
2 | hod1 | Služba |
2 | hod2 | Finance |
2 | hod3 | Tech |
1 | hod5 | Podpěra, podpora |
1 | hod3 | Služba |
1 | hod3 | Finance |
1 | hod5 | HR |
Klauzula HAVING v SQL
Použití klauzule HAVING s klauzulí Group By omezí výsledek dotazu na řádky s hodnotou uvedenou v klauzule With.
Pochopení tohoto příkladu bude usnadněno -
Příklad č. 4
SELECT * FROM EMPLOYEE GROUP BY gender HAVING gender = “Female”;
Provedení tohoto dotazu vyvolá následující výsledek -
název | stáří | telefon | Rod | e-mailem |
Smět | 22 | 456 | ženský | |
Ana | 45 | 644 | ženský | |
Hrnce | 57 | 3456 | ženský | |
Res | 45 | 456 | ženský | |
Wan | 55 | 7789 | ženský |
Příklad č. 5
SELECT * FROM Employee_Department GROUP BY department HAVING department = “Finance”;
Provedení tohoto dotazu vyvolá následující výsledek -
název | hod | oddělení |
Smět | hod2 | Finance |
Hrnce | hod2 | Finance |
Tung | hod3 | Finance |
Závěr
Pomocí klauzule GROUP BY s příkazem SELECT můžeme seskupit řádky se stejnými hodnotami spolu s použitím agregačních funkcí, konstant a výrazů.
Doporučené články
Toto je průvodce klauzulí GROUP BY v SQL. Zde diskutujeme, jak GROUP BY Clause pracuje v SQL pomocí příkladů a tabulek zaměstnanců. Další informace naleznete také v následujících článcích -
- SQL Vložit dotaz
- Zobrazení SQL
- Databáze v SQL
- Transakce v SQL