Klavzula SQL GROUP BY in HAVING s primeri

Kazalo:

Anonim

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.