4.1 Oszlopok csoportosítása

Ami még nagyon fontos, hogy ha rekordokat csoportosítunk, akkor a szekcióban SELECTcsak azokat az oszlopokat tudjuk megadni, amelyek szerint csoportosulnak az adatok.

tenem tudírjon egy típusú lekérdezést, és adja meg a névSELECT oszlopot a szakaszban :

SELECT brand, name
FROM product
GROUP BY brand

Van egy csomó sor a terméktáblázatban a névmezővel , és nem egyértelmű, hogy melyik sort kell itt helyettesítenie. Gondolja át újra: szeretné tudni, hogy az egyes márkák hány terméke van, és hogyan kaphatja meg a kapott táblázat a termék nevét?

Ha az operátort használja GROUP BY, akkor normál sorok nem kerülhetnek be az eredménybe, hanem csak az adatok csoportosítására szolgáló oszlopok és a „számított oszlopok”, mint pl.COUNT(*)

4.2 Csoportosítás számított oszlopok szerint

De csoportosíthat több oszlop, sőt számított oszlopok szerint is. Példa:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

És ennek a lekérdezésnek az eredménye:

bérlés_év teljes
2012 1
2013 1
2014 1
2015 2
2018 1

Elemezzük kérésünket.

Az alkalmazottak táblázatában minden alkalmazottnak egyedi felvételi dátuma van, így az adatok csoportosítása nem fog működni – minden dátumhoz egy rekord tartozik, és a csoportosításnak nincs sok értelme. De ha a felvétel időpontjáról áttérünk a felvétel évére, akkor könnyen előfordulhat, hogy a cég több alkalmazottat vett fel ugyanabban az évben.

Nézzük meg újra, hogyan fog kinézni ez a táblázat a csoportosítás előtt:

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	join_date
FROM employee

És ennek a lekérdezésnek az eredménye:

id név bérlés_év csatlakozás dátuma
1 Ivanov Iván 2012 2012-06-30
2 Petrov Petr 2013 2013-08-12
3 Ivanov Szergej 2014 2014-01-01
4 Rabinovics Moisa 2015 2015-05-12
5 Kirienko Anasztázia 2015 2015-10-10
6 Vaska 2018 2018-11-11

De ez a kapott táblázat csoportosítható a bérbeadás_év szerint , és megtudhatja, hány embert vettek fel egy adott évben.

4.3 Csoportosítás több oszlop szerint

Most próbáljuk meg kideríteni, hány alkalmazottat vettünk fel minden egyes hónapban. Ehhez nem egy, hanem egyszerre két számított mezőt kell hozzáadnunk a lekérdezéshez - a bérlés évét (hire_year) és a bérlés hónapját (hire_month).

Írjunk egy ilyen lekérdezést:

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	join_date
FROM employee

És ennek a lekérdezésnek az eredménye:

id név bérlés_év bérlési_hónap csatlakozás dátuma
1 Ivanov Iván 2012 6 2012-06-30
2 Petrov Petr 2013 8 2013-08-12
3 Ivanov Szergej 2014 1 2014-01-01
4 Rabinovics Moisa 2015 5 2015-05-12
5 Kirienko Anasztázia 2015 10 2015-10-10
6 Vaska 2018 tizenegy 2018-11-11

Ha ebben az eredménytáblázatban az adatokat havonta csoportosítjuk, akkor egyszerűen csoportokba csoportosítjuk az embereket, függetlenül attól, hogy melyik évben vették fel őket. Az eredményül kapott táblázatnak három oszlopot kell tartalmaznia: év, hónap és a felvett alkalmazottak száma.

Ehhez az operátor után GROUP BYnem egy oszlop nevét kell használni, hanem kettőt. Példa:

SELECT
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month

És ennek a lekérdezésnek az eredménye:

bérlés_év bérlési_hónap teljes
2012 6 1
2013 8 1
2014 1 1
2015 5 1
2015 10 1
2018 tizenegy 1

Kevés rekord van a táblázatban, ezért az összesített oszlopban mindenhol egységek vannak. És mellesleg vegye figyelembe, hogy minél több oszlop alapján csoportosítunk, annál több sor lesz az eredményben.