SQL GROUP BY ja kellel on klausel koos näidetega

Lang L: none (table-of-contents):

Anonim

Mis on klauslite SQL-rühm?

Klausel GROUP BY on SQL-käsk, mida kasutatakse samade väärtustega ridade rühmitamiseks . Avalduses SELECT kasutatakse gruppi GROUP BY. Valikuliselt kasutatakse seda koos koondfunktsioonidega andmebaasist kokkuvõtlike aruannete loomiseks.

Seda ta teebki, andmebaasi andmed kokku võttes.

Klausleid GROUP BY sisaldavaid päringuid nimetatakse rühmitatud päringuteks ja need tagastavad iga rühmitatud üksuse kohta ainult ühe rea.

SQL GRUPP süntaksi järgi

Nüüd, kui me 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 avaldused ..." on tavaline SQL SELECT käsupäring.
  • " GROUP BY column_name1" on klausel, mis teostab grupeerimise veeru_name1 põhjal.
  • "[, veeru_nimi2, ...]" on valikuline; tähistab teisi veerunimesid, kui rühmitamine toimub mitmel veerul.
  • "[HAVING condition]" on valikuline; seda kasutatakse nende rühmade piiramiseks, mida klausel GROUP BY mõjutab. See sarnaneb WHERE klausliga.

Grupeerimine ühe veeru abil

Selleks, et aidata mõista klausli SQL Group By mõju, täidame lihtsa päringu, mis tagastab kõik sooliste kirjed liikmete tabelist.

SELECT `gender` FROM `members` ;
 
gender
Female
Female
Male
Female
Male
Male
Male
Male
Male

Oletame, et tahame saada sugude jaoks ainulaadseid väärtusi. Saame kasutada järgmist päringut -

SELECT `gender` FROM `members` GROUP BY `gender`;

Ülaltoodud skripti käivitamine MySQL-i töölaual Myflixdb-ga annab meile järgmised tulemused.

 
gender
Female
Male

Pange tähele, et ainult kaks tulemust on tagastatud. 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 ka naissoost liikmetega.

Grupeerimine mitme veeru abil

Oletame, et tahame saada nimekirja filmi category_id ja vastavatest aastatest, mil need välja anti.

Vaatame 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.

Teostame sama päringu SQL-i grupi abil -

SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;

Ülaltoodud skripti käivitamine MySQL-i töölaual myflixdb vastu annab meile järgmised 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 nii kategooria id kui ka välja antud aasta kohta, et tuvastada unikaalsed read meie ülaltoodud näites.

Kui kategooria ID on sama, kuid välja antud aasta on erinev, käsitletakse rida unikaalsena. Kui kategooria id ja välja antud aasta on sama kui mitme rea puhul, loetakse seda duplikaadiks ja ainult üheks rida on näidatud.

Funktsioonide rühmitamine ja liitmine

Oletame, et soovime oma andmebaasi isaste ja naiste koguarvu. Selleks võime kasutada järgmist allpool näidatud skripti.

SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;

Ülaltoodud skripti käivitamine MySQL-i töölaual myflixdb-ga annab meile järgmised tulemused.

 
gender COUNT('membership_number')
Female 3
Male 5

Allpool näidatud tulemused on rühmitatud iga postitatud unikaalse soo väärtuse järgi ja rühmitatud ridade arv loendatakse funktsiooni COUNT liitmise abil.

Päringutulemuste piiramine klausli HAVING abil

Alati ei taha me grupeerida kõiki antud tabeli andmeid. Mõnikord tahame oma tulemusi piirata teatud etteantud kriteeriumidega. Sellistel juhtudel saame kasutada klauslit HAVING

Oletame, et tahame teada kõiki filmikategooria ID 8 väljalaske aastaid. Kasutaksime tulemuste saavutamiseks järgmist skripti.

SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;

Ülaltoodud skripti käivitamine MySQL-i töölaual Myflixdb-ga annab meile järgmised 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 GROUP BY klausel on mõjutanud ainult kategooria ID 8 filme.

Kokkuvõte

  • Klauslit GROUP BY kasutatakse rühmitamiseks samade väärtustega.
  • Klauslit GROUP BY kasutatakse koos SQL SELECT-lausega.
  • Klauslis GROUP BY kasutatavat lauset SELECT saab kasutada ainult veergude nimesid, koondfunktsioone, konstante ja väljendeid.
  • SQL-i klauslit kasutatakse klausli GROUP BY tagastatud tulemuste piiramiseks.
  • Klauslit MYSQL GROUP BY kasutatakse andmete kogumiseks mitmest kirjest ja ühe või mitme veeru poolt määratud tagastatud kirjest.