SQL GROUP BY és HAVING záradék példákkal
Mi az SQL Group by Clause?
A GROUP BY záradék egy SQL-parancs, amelyhez szokott csoportosítsa az azonos értékkel rendelkező sorokat. A GROUP BY záradékot a SELECT utasítás használja. Opcionálisan az összesítő függvényekkel együtt használható összefoglaló jelentések készítésére az adatbázisból.
Ez az, amit csinál, összefoglaló adatokat az adatbázisból.
A GROUP BY záradékot tartalmazó lekérdezéseket csoportosított lekérdezéseknek nevezzük, és csak egyetlen sort adnak vissza minden csoportosított elemhez.
SQL GROUP BY Szintaxis
Most, hogy tudjuk, mi az SQL GROUP BY záradék, nézzük meg egy lekérdezés szerinti alapcsoport szintaxisát.
SELECT statements... GROUP BY column_name1[,column_name2,...] [HAVING condition];
ITT
- A „SELECT utasítások…” a szabványos SQL SELECT parancslekérdezés.
- "CSOPORTOSÍT oszlop_neve1” az a záradék, amely az oszlopnév1 alapján végzi a csoportosítást.
- „[,oszlop_neve2,…]” nem kötelező; más oszlopneveket jelöl, ha a csoportosítás egynél több oszlopon történik.
- A „[HAVING feltétel]” nem kötelező; a GROUP BY záradék által érintett sorok korlátozására szolgál. Hasonló a WHERE záradék.
Csoportosítás segítségével a Egy oszlop
Az SQL Group By záradék hatásának megértése érdekében hajtsunk végre egy egyszerű lekérdezést, amely visszaadja az összes gender bejegyzést a Members táblából.
SELECT `gender` FROM `members` ;
gender |
---|
Female |
Female |
Male |
Female |
Male |
Male |
Male |
Male |
Male |
Tegyük fel, hogy meg akarjuk kapni a nemek egyedi értékeit. A következő lekérdezést használhatjuk:
SELECT `gender` FROM `members` GROUP BY `gender`;
A fenti szkript végrehajtása MySQL munkapad A Myflixdb ellen a következő eredményeket kapjuk.
gender |
---|
Female |
Male |
Megjegyzendő, hogy csak két eredmény érkezett vissza. Ennek az az oka, hogy csak két nemünk van, férfi és nő. A GROUP BY záradék az SQL-ben az összes „férfi” tagot csoportosította, és csak egyetlen sort adott vissza. Ugyanezt tette a „női” tagokkal is.
Csoportosítás segítségével több oszlop
Tegyük fel, hogy szeretnénk kapni egy listát a film kategória_azonosítójáról és a megfelelő kiadási évekről.
Nézzük meg ennek az egyszerű lekérdezésnek a kimenetét
SELECT `category_id`,`year_released` FROM `movies` ;
category_id | year_released |
---|---|
1 | 2011 |
2 | 2008 |
NULL | 2008 |
NULL | 2010 |
8 | 2007 |
6 | 2007 |
6 | 2007 |
8 | 2005 |
NULL | 2012 |
7 | 1920 |
8 | NULL |
8 | 1920 |
A fenti eredménynek sok ismétlődése van.
Végezzük el ugyanazt a lekérdezést a group by használatával SQL-ben –
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
A fenti szkript végrehajtása MySQL munkapad a myflixdb-vel szemben a következő eredményeket adja az alábbiakban.
category_id | year_released |
---|---|
NULL | 2008 |
NULL | 2010 |
NULL | 2012 |
1 | 2011 |
2 | 2008 |
6 | 2007 |
7 | 1920 |
8 | 1920 |
8 | 2005 |
8 | 2007 |
A GROUP BY záradék mind a kategóriaazonosítón, mind a kiadott éven működik az azonosítás érdekében egyedi sorokat a fenti példánkban.
Ha a kategóriaazonosító megegyezik, de a kiadás éve eltér, akkor a sor egyediként lesz kezelve. Ha a kategóriaazonosító és a kiadás éve egynél több sorban megegyezik, akkor az ismétlődőnek és csak egy sornak minősül. megmutatva.
Csoportosítás és összesített függvények
Tegyük fel, hogy az adatbázisunkban a hímek és a nőstények teljes számát szeretnénk. Ehhez az alább látható szkriptet használhatjuk.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
A fenti szkript végrehajtása MySQL munkapad a myflixdb ellen a következő eredményeket adja.
gender | COUNT('membership_number') |
---|---|
Female | 3 |
Male | 5 |
Az alább látható eredmények minden közzétett egyedi nemi érték szerint vannak csoportosítva, és a csoportosított sorok számát a COUNT összesítő függvény számolja.
A lekérdezési eredmények korlátozása a HOGY kikötés
Nem mindig akarunk csoportosítást végezni egy adott tábla összes adatán. Lesznek olyan esetek, amikor egy bizonyos kritériumra szeretnénk korlátozni az eredményeinket. Ilyen esetekben használhatjuk a HAVING záradékot
Tegyük fel, hogy tudni akarjuk a 8-as filmkategória összes megjelenési évét. Eredményeink eléréséhez a következő forgatókönyvet használnánk.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
A fenti szkript végrehajtása MySQL munkapad a Myflixdb-vel szemben az alábbi eredményeket adja.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
9 | Honey mooners | John Schultz | 2005 | 8 |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
Vegye figyelembe, hogy a GROUP BY záradék csak a 8-as kategóriaazonosítójú filmeket érinti.
Összegzésként
- A GROUP BY Clause SQL az azonos értékű sorok csoportosítására szolgál.
- A GROUP BY záradék a következővel együtt használatos SQL SELECT utasítás.
- A GROUP BY záradékban használt SELECT utasítás csak oszlopneveket, összesítő függvényeket, konstansokat és kifejezéseket tartalmazhat.
- Az SQL Having Clause a GROUP BY záradék által visszaadott eredmények korlátozására szolgál.
- A MYSQL GROUP BY záradék több rekordból és egy vagy több oszlop által visszaadott rekordkészletből származó adatok gyűjtésére szolgál.