Ú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

  1. Příkaz SELECT - dotaz na příkaz SQL
  2. table_name - název odkazované databázové tabulky
  3. podmínky - viz podmínky, které mají být zkontrolovány
  4. GROUP BY - klauzule pro seskupení stejných řádků dohromady
  5. 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ázevstářítelefonRode-mailem
John23123mužský
Smět22456ženský
Ana45644ženský
Hrnce573456ženský
Res45456ženský
Opálení782456mužský
Běžel345899mužský
Wan557789ženský
Tung325689mužský
Chung214678muž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ázevhododdělení
Johnhod1Služba
Směthod2Finance
Anahod1Služba
Hrncehod2Finance
Reshod3Tech
Opáleníhod5Podpěra, podpora
Běželhod3Služba
Wanhod3Tech
Tunghod3Finance
Chunghod5HR

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 -

hododdělení
hod1Služba
hod2Finance
hod3Tech
hod5Podpěra, podpora
hod3Služba
hod3Finance
hod5HR

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
5muž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í
3Služba
3Finance
2Tech
1Podpěra, podpora
1HR

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')hododdělení
2hod1Služba
2hod2Finance
2hod3Tech
1hod5Podpěra, podpora
1hod3Služba
1hod3Finance
1hod5HR

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ázevstářítelefonRode-mailem
Smět22456ženský
Ana45644ženský
Hrnce573456ženský
Res45456ženský
Wan557789ženský

Příklad č. 5

SELECT * FROM Employee_Department GROUP BY department HAVING department = “Finance”;

Provedení tohoto dotazu vyvolá následující výsledek -

názevhododdělení
Směthod2Finance
Hrncehod2Finance
Tunghod3Finance

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 -

  1. SQL Vložit dotaz
  2. Zobrazení SQL
  3. Databáze v SQL
  4. Transakce v SQL