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.