Kaj je skupina SQL by Clause?
Stavek GROUP BY je ukaz SQL, ki se uporablja za združevanje vrstic z enakimi vrednostmi . Stavek GROUP BY se uporablja v stavku SELECT. Izbirno se uporablja skupaj s skupnimi funkcijami za izdelavo zbirnih poročil iz baze podatkov.
To počne, povzema podatke iz baze podatkov.
Poizvedbe, ki vsebujejo stavek GROUP BY, se imenujejo združene poizvedbe in vrnejo samo eno vrstico za vsak zbrani element.
Sintaksa SQL GROUP BY
Zdaj, ko vemo, kaj je stavek SQL GROUP BY, poglejmo sintakso osnovne skupine po poizvedbi.
SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];
TUKAJ
- "SELECT stavki ..." je standardna poizvedba SQL SELECT.
- " GROUP BY ime_ stolpca1" je stavek, ki izvaja razvrščanje na podlagi imena_stolca1.
- "[, ime_ stolpca2, ...]" ni obvezno; predstavlja druga imena stolpcev, če je razvrščanje v več stolpcev izvedeno.
- "[HAVING condition]" ni obvezen; uporablja se za omejevanje vrstic, na katere vpliva stavek GROUP BY. Podobno je klavzuli WHERE.
Združevanje z uporabo enega samega stolpca
Da bi lažje razumeli učinek klavzule SQL Group By, izvedimo preprosto poizvedbo, ki vrne vse vnose spola iz tabele članov.
SELECT `gender` FROM `members` ;
gender |
---|
Female |
Female |
Male |
Female |
Male |
Male |
Male |
Male |
Male |
Recimo, da želimo dobiti edinstvene vrednosti za spole. Lahko uporabimo naslednjo poizvedbo -
SELECT `gender` FROM `members` GROUP BY `gender`;
Izvedba zgornjega skripta v delovnem okolju MySQL v primerjavi z Myflixdb nam da naslednje rezultate.
gender |
---|
Female |
Male |
Upoštevajte, da sta bila vrnjena le dva rezultata. To je zato, ker imamo samo dve vrsti spolov: moški in ženska. Stavek GROUP BY v SQL je zbral vse člane "Moški" in zanj vrnil samo eno vrstico. Enako je storila s člani "Ženske".
Združevanje z uporabo več stolpcev
Recimo, da želimo dobiti seznam filmov category_id in ustrezna leta, v katerih so bili izdani.
Opazujmo rezultat te preproste poizvedbe
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 |
Zgornji rezultat ima veliko dvojnikov.
Izvedimo isto poizvedbo s pomočjo group by v SQL -
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
Izvedba zgornjega skripta v delovnem okolju MySQL proti myflixdb nam da naslednje rezultate, prikazane spodaj.
category_id | year_released |
---|---|
NULL | 2008 |
NULL | 2010 |
NULL | 2012 |
1 | 2011 |
2 | 2008 |
6 | 2007 |
7 | 1920 |
8 | 1920 |
8 | 2005 |
8 | 2007 |
Klavzula GROUP BY deluje tako na id kategorije kot tudi na leto, da se identificirajo edinstvene vrstice v našem zgornjem primeru.
Če je id kategorije enak, leto izdaje pa drugačno, se vrstica obravnava kot edinstvena. Če sta ID kategorije in leto izdaje enaka za več vrstic, se šteje za dvojnik in samo eno vrstico. je prikazano.
Funkcije združevanja in združevanja
Recimo, da želimo v naši bazi podatkov skupno število moških in žensk. Za to lahko uporabimo spodnji skript, prikazan spodaj.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
Izvedba zgornjega skripta v delovnem okolju MySQL proti myflixdb nam da naslednje rezultate.
gender | COUNT('membership_number') |
---|---|
Female | 3 |
Male | 5 |
Spodaj prikazani rezultati so razvrščeni po vseh objavljenih unikatnih vrednostih spola, število združenih vrstic pa se prešteje s pomočjo funkcije združevanja COUNT
Omejevanje rezultatov poizvedbe s pomočjo stavka HAVING
Ni vedno, da bomo želeli izvesti združevanje vseh podatkov v dani tabeli. Včasih bomo želeli svoje rezultate omejiti na določena določena merila. V takih primerih lahko uporabimo stavek HAVING
Recimo, da želimo vedeti vsa leta izdaje za kategorijo ID 8. Za doseganje rezultatov bi uporabili naslednji scenarij.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
Izvedba zgornjega skripta v delovnem okolju MySQL v primerjavi z Myflixdb nam da naslednje rezultate, prikazane spodaj.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
9 | Honey mooners | John Schultz | 2005 | 8 |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
Upoštevajte, da naša klavzula GROUP BY vpliva samo na filme z id 8 kategorije.
Povzetek
- Klavzula GROUP BY se uporablja za združevanje vrstic z enakimi vrednostmi.
- Stavek GROUP BY se uporablja skupaj z izjavo SQL SELECT.
- Stavek SELECT, uporabljen v stavku GROUP BY, lahko uporablja samo imena stolpcev, agregatne funkcije, konstante in izraze.
- Stavek SQL ob uporabi se uporablja za omejevanje rezultatov, ki jih vrne stavek GROUP BY.
- Klavzula MYSQL GROUP BY se uporablja za zbiranje podatkov iz več zapisov in vrnjenega zapisa, ki ga nastavi en ali več stolpcev.