SQL GROUP BY ja HAVING-lause ja esimerkkejä

Mikä on SQL Group by Clause?

GROUP BY -lause on SQL-komento, johon on totuttu ryhmittele rivit, joilla on samat arvot. GROUP BY -lausetta käytetään SELECT-käskyssä. Vaihtoehtoisesti sitä käytetään yhdessä aggregaattitoimintojen kanssa yhteenvetoraporttien tuottamiseen tietokannasta.

Sitä se tekee, tietojen yhteenveto tietokannasta.

GROUP BY -lauseen sisältäviä kyselyjä kutsutaan ryhmiteltyiksi kyselyiksi, ja ne palauttavat vain yhden rivin jokaiselle ryhmitellylle kohteelle.

SQL GROUP BY Syntaksi

Nyt kun tiedämme, mikä SQL GROUP BY -lause on, tarkastellaan perusryhmän syntaksia kyselyn mukaan.

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

TÄÄLTÄ

  • "SELECT-käskyt…" on standardi SQL SELECT -komentokysely.
  • "GROUP BY sarakkeen_nimi1” on lauseke, joka suorittaa ryhmittelyn sarakkeen_nimi1 perusteella.
  • "[,sarakkeen_nimi2,…]" on valinnainen; edustaa muita sarakkeiden nimiä, kun ryhmittely on tehty useammalle kuin yhdelle sarakkeelle.
  • "[HAVING-ehto]" on valinnainen; sitä käytetään rajoittamaan rivejä, joihin GROUP BY -lause vaikuttaa. Se on samanlainen kuin WHERE-lauseke.

Ryhmittely käyttämällä a Single sarake

Ymmärtääksemme SQL Group By -lauseen vaikutusta, 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 yksilölliset arvot. Voimme käyttää seuraavaa kyselyä -

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

Suoritetaan yllä oleva komentosarja MySQL työpöytä 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:n GROUP BY -lause ryhmitti kaikki "mies"-jäsenet yhteen ja palautti sille vain yhden rivin. Se teki samoin "naisjäsenten" kanssa.

Ryhmittely käyttäen useita sarakkeita

Oletetaan, että haluamme saada luettelon elokuvan kategorian_tunnuksesta 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 kaksoiskappaleita.

Suoritetaan sama kysely ryhmä by:lla SQL:ssä –

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

Suoritetaan yllä oleva komentosarja MySQL työpenkki myflixdb:tä vastaan ​​antaa meille seuraavat alla näkyvät 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ä luokkatunnuksella että tunnistevuodella unique rivit yllä olevassa esimerkissämme.

Jos luokan tunnus on sama, mutta julkaisuvuosi on eri, riviä käsitellään yksilöllisenä. Jos luokan tunnus ja julkaisuvuosi ovat samat useammalla kuin yhdellä rivillä, sitä pidetään kaksoiskappaleena ja vain yksi rivi. on näytetty.

Ryhmittely ja kokonaisfunktiot

Oletetaan, että haluamme tietokannassamme olevien miesten ja naisten kokonaismäärän. Voimme käyttää seuraavaa alla näkyvää skriptiä tehdäksesi sen.

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

Suoritetaan yllä oleva komentosarja MySQL työpenkki myflixdb:tä vastaan ​​antaa meille seuraavat tulokset.

gender COUNT('membership_number')
Female 3
Male 5

Alla näkyvät tulokset on ryhmitelty jokaisen lähetetyn yksilöllisen sukupuoliarvon mukaan, ja ryhmiteltyjen rivien määrä lasketaan COUNT-koontifunktiolla.

Kyselytulosten rajoittaminen käyttämällä oTTAA lauseke

Emme aina halua ryhmitellä kaikkia tietyn taulukon tietoja. Tulee aikoja, jolloin haluamme rajoittaa tuloksemme tiettyihin kriteereihin. Tällaisissa tapauksissa voimme käyttää HAVING-lausetta

Oletetaan, että haluamme tietää elokuvakategorian id 8 kaikki julkaisuvuodet. Käyttäisimme seuraavaa käsikirjoitusta saavuttaaksemme tulokset.

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

Suoritetaan yllä oleva komentosarja MySQL työpenkki Myflixdb:tä vastaan ​​antaa meille seuraavat alla näkyvät 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 -lauseemme vaikuttaa vain elokuviin, joiden kategoriatunnus on 8.

Yhteenveto

  • GROUP BY Clause SQL:ää käytetään ryhmittelemään rivejä, joilla on samat arvot.
  • GROUP BY -lausetta käytetään yhdessä lausekkeen kanssa SQL SELECT -käsky.
  • GROUP BY -lauseessa käytetty SELECT-käsky voi sisältää vain sarakkeiden nimiä, koostefunktioita, vakioita ja lausekkeita.
  • SQL Having Clausea käytetään rajoittamaan GROUP BY -lauseen palauttamia tuloksia.
  • MYSQL GROUP BY -lausetta käytetään tietojen keräämiseen useista tietueista ja yhden tai useamman sarakkeen palauttamista tietueista.