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.