SQL GROUP BY ja HAVING -lauseke esimerkeillä

Sisällysluettelo:

Anonim

Mikä on SQL-ryhmä lausekkeella?

GROUP BY -lauseke on SQL-komento, jota käytetään ryhmittelemään rivit, joilla on samat arvot . GROUP-lauseketta käytetään SELECT-käskyssä. Valinnaisesti sitä käytetään koostefunktioiden kanssa yhteenvetoraporttien tuottamiseksi tietokannasta.

Sitä se tekee, tiivistämällä tietokannan tiedot.

GROUP BY -lauseketta sisältäviä kyselyitä kutsutaan ryhmitetyiksi kyselyiksi, ja ne palauttavat vain yhden rivin jokaiselle ryhmitetylle kohteelle.

SQL GROUP BY -syntaksi

Nyt kun tiedämme, mitä SQL GROUP BY -lauseke on, katsotaanpa perusryhmän syntaksia kyselyn mukaan.

SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];

TÄSSÄ

  • "SELECT-lauseet ..." on tavallinen SQL SELECT -komentokysely.
  • " GROUP BY sarake_nimi1" on lauseke, joka suorittaa ryhmittelyn sarakkeen_nimi1 perusteella.
  • "[, sarakkeen_nimi2, ...]" on valinnainen; edustaa muita sarakkeiden nimiä, kun ryhmittely tehdään useammalle kuin yhdelle sarakkeelle.
  • "[HAVING condition]" on valinnainen; sitä käytetään rajoittamaan rivejä, joihin GROUP BY -lauseke vaikuttaa. Se on samanlainen kuin WHERE-lauseke.

Ryhmittely yhden sarakkeen avulla

Jotta voisimme ymmärtää SQL Group By -lausekkeen vaikutuksen, suoritetaan yksinkertainen kysely, joka palauttaa kaikki sukupuolimerkinnät jäsentaulukosta.

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

Oletetaan, että haluamme saada sukupuolten ainutlaatuiset arvot. Voimme käyttää seuraavaa kyselyä -

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

Yllä olevan komentosarjan suorittaminen MySQL-työpöydällä Myflixdb: tä vastaan ​​antaa meille seuraavat tulokset.

 
gender
Female
Male

Huomaa, että vain kaksi tulosta on palautettu. Tämä johtuu siitä, että meillä on vain kaksi sukupuolityyppiä Mies ja Nainen. SQL BY: n GROUP BY -lauseke ryhmitti kaikki "Mies" -jäsenet yhteen ja palautti sille vain yhden rivin. Se teki samoin naispuolisten jäsenten kanssa.

Ryhmittely useilla sarakkeilla

Oletetaan, että haluamme saada luettelon elokuvan category_id ja vastaavista vuosista, jolloin ne julkaistiin.

Tarkastellaan tämän yksinkertaisen kyselyn tulosta

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

Yllä olevassa tuloksessa on useita kopioita.

Suoritetaan sama kysely käyttämällä ryhmää SQL: llä -

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

Yllä olevan komentosarjan suorittaminen MySQL-työpöydällä myflixdb: tä vastaan ​​antaa meille seuraavat tulokset.

 
category_id year_released
NULL 2008
NULL 2010
NULL 2012
1 2011
2 2008
6 2007
7 1920
8 1920
8 2005
8 2007

GROUP BY -lauseke toimii sekä luokan id että julkaisuvuoden kanssa yksilöivien rivien tunnistamiseksi yllä olevassa esimerkissä.

Jos luokan tunnus on sama, mutta julkaistu vuosi on erilainen, riviä kohdellaan ainutlaatuisena. Jos luokan tunnus ja julkaistu vuosi ovat samat useammalle kuin yhdelle riville, sitä pidetään kaksoiskappaleena ja vain yksi rivi on näytetty.

Ryhmittely- ja koontitoiminnot

Oletetaan, että haluamme tietokantaamme miesten ja naisten kokonaismäärän. Voimme käyttää seuraavaa alla olevaa komentosarjaa.

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

Yllä olevan komentosarjan suorittaminen MySQL-työpöydällä myflixdb: tä vastaan ​​antaa meille seuraavat tulokset.

 
gender COUNT('membership_number')
Female 3
Male 5

Alla esitetyt tulokset on ryhmitelty jokaisen lähetetyn yksilöllisen sukupuoliarvon mukaan ja ryhmiteltyjen rivien määrä lasketaan käyttämällä COUNT-aggregaattitoimintoa.

Kyselytulosten rajoittaminen HAVING- lausekkeen avulla

Ei aina ole, että haluamme tehdä ryhmittelyjä kaikille tietyn taulukon tiedoille. Joskus haluamme rajoittaa tulokset tiettyyn kriteeriin. Tällaisissa tapauksissa voimme käyttää HAVING-lauseketta

Oletetaan, että haluamme tietää kaikki elokuvaluokan id julkaisuvuodet. Tuloksemme saavutetaan seuraavalla komentosarjalla.

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

Yllä olevan komentosarjan suorittaminen MySQL-työpöydällä Myflixdb: tä vastaan ​​antaa meille seuraavat tulokset.

 
movie_id title director year_released category_id
9 Honey mooners John Schultz 2005 8
5 Daddy's Little Girls NULL 2007 8

Huomaa, että GROUP BY -lauseke on vaikuttanut vain elokuviin, joiden luokan tunnus on 8.

Yhteenveto

  • GROUP BY -lauseketta SQL käytetään ryhmittelemään rivit samoilla arvoilla.
  • GROUP BY -lauseketta käytetään yhdessä SQL SELECT -käskyn kanssa.
  • GROUP BY -lausekkeessa käytettyä SELECT-käskyä voidaan käyttää vain sarakkeiden nimillä, aggregaattifunktioilla, vakioilla ja lausekkeilla.
  • SQL Having -lauseketta käytetään rajoittamaan GROUP BY -lausekkeen palauttamia tuloksia.
  • MYSQL GROUP BY -lauseketta käytetään tietojen keräämiseen useista tietueista ja yhden tai useamman sarakkeen asettamasta palautetusta tietueesta.