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.