SQL GROUP BY ja HAVING klausel koos näidetega
Mis on klausli järgi SQL-rühm?
Klausel GROUP BY on SQL-käsk, mida kasutatakse rühmita ridu, millel on samad väärtused. SELECT-lauses kasutatakse klauslit GROUP BY. Valikuliselt kasutatakse seda koos koondfunktsioonidega andmebaasist kokkuvõtlike aruannete koostamiseks.
Seda see teeb, andmeid kokku võttes andmebaasist.
Päringuid, mis sisaldavad klauslit GROUP BY, nimetatakse rühmitatud päringuteks ja need tagastavad iga rühmitatud üksuse kohta ainult ühe rea.
SQL GROUP BY Süntaks
Nüüd, kui teame, mis on klausel SQL GROUP BY, vaatame põhirühma süntaksit päringu järgi.
SELECT statements... GROUP BY column_name1[,column_name2,...] [HAVING condition];
SIIN
- „SELECT laused…” on standardne SQL SELECT käsupäring.
- "GROUP BY veeru_nimi1” on klausel, mis teostab rühmitamise veeru_nimi1 alusel.
- „[,veeru_nimi2,…]” on valikuline; tähistab teisi veergude nimesid, kui rühmitatakse rohkem kui ühes veerus.
- „[HAVING tingimus]” on valikuline; seda kasutatakse klausli GROUP BY poolt mõjutatud ridade piiramiseks. See on sarnane KUS klausel.
Rühmitamine kasutades a Üks veerg
Et aidata mõista SQL Group By klausli mõju, käivitame lihtsa päringu, mis tagastab kõik sookirjed liikmete tabelist.
SELECT `gender` FROM `members` ;
gender |
---|
Female |
Female |
Male |
Female |
Male |
Male |
Male |
Male |
Male |
Oletame, et tahame saada sugude jaoks ainulaadsed väärtused. Saame kasutada järgmist päringut -
SELECT `gender` FROM `members` GROUP BY `gender`;
Ülaltoodud skripti käivitamine MySQL töölaud Myflixdb vastu annab meile järgmised tulemused.
gender |
---|
Female |
Male |
Pange tähele, et tagastatud on ainult kaks tulemust. Seda seetõttu, et meil on ainult kaks sootüüpi mees ja naine. SQL-i klausel GROUP BY rühmitas kõik "meessoost" liikmed kokku ja tagastas selle jaoks ainult ühe rea. Sama tegi see ka naisliikmetega.
Rühmitamine kasutades mitu veergu
Oletame, et tahame saada loendi filmi kategooria_id ja vastavatest aastatest, mil need välja anti.
Vaatleme selle lihtsa päringu väljundit
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 |
Ülaltoodud tulemusel on palju duplikaate.
Käivitame sama päringu, kasutades SQL-is rühma by -
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
Ülaltoodud skripti käivitamine MySQL töölaud myflixdb vastu annab meile järgmised allpool näidatud tulemused.
category_id | year_released |
---|---|
NULL | 2008 |
NULL | 2010 |
NULL | 2012 |
1 | 2011 |
2 | 2008 |
6 | 2007 |
7 | 1920 |
8 | 1920 |
8 | 2005 |
8 | 2007 |
Klausel GROUP BY toimib tuvastamiseks nii kategooria ID kui ka välja antud aastal ainulaadne read meie ülaltoodud näites.
Kui kategooria ID on sama, kuid väljalaskeaasta on erinev, käsitletakse rida kordumatuna. Kui kategooria ID ja väljalaskeaasta on rohkem kui ühe rea puhul samad, loetakse see duplikaadiks ja ainult üheks reaks. on näidatud.
Rühmitamine ja koondfunktsioonid
Oletame, et tahame oma andmebaasis meeste ja naiste koguarvu. Selleks saame kasutada järgmist allpool näidatud skripti.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
Ülaltoodud skripti käivitamine MySQL töölaud myflixdb vastu annab meile järgmised tulemused.
gender | COUNT('membership_number') |
---|---|
Female | 3 |
Male | 5 |
Allpool näidatud tulemused on rühmitatud iga postitatud kordumatu soo väärtuse järgi ja rühmitatud ridade arv loendatakse koondfunktsiooni COUNT abil.
Päringutulemuste piiramine kasutades VÕIMALIK klausel
Alati ei taha me rühmitada kõiki antud tabeli andmeid. Mõnikord tahame oma tulemusi piirata teatud kriteeriumidega. Sellistel juhtudel võime kasutada HAVING-klauslit
Oletame, et tahame teada filmi kategooria ID 8 kõiki väljalaskeaastaid. Kasutaksime oma tulemuste saavutamiseks järgmist skripti.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
Ülaltoodud skripti käivitamine MySQL töölaud Myflixdb vastu annab meile järgmised allpool näidatud tulemused.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
9 | Honey mooners | John Schultz | 2005 | 8 |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
Pange tähele, et meie klausel GROUP BY on mõjutanud ainult filme, mille kategooria ID on 8.
kokkuvõte
- GROUP BY Clause SQL-i kasutatakse samade väärtustega ridade rühmitamiseks.
- Klauslit GROUP BY kasutatakse koos SQL SELECT avaldus.
- GROUP BY-klauslis kasutatud SELECT-lauset saab kasutada ainult veergude nimede, koondfunktsioonide, konstantide ja avaldiste kasutamisel.
- SQL Having Clauset kasutatakse klausli GROUP BY poolt tagastatavate tulemuste piiramiseks.
- MYSQL GROUP BY klauslit kasutatakse andmete kogumiseks mitmest kirjest ja ühe või mitme veeru tagastatud kirjetest.