Suuri osa relaatiotietokantojen voimasta tulee tietojen suodattamisesta ja taulukoiden yhdistämisestä. Siksi edustamme näitä suhteita ensisijaisesti. Mutta nykyaikaiset tietokantajärjestelmät tarjoavat toisen arvokkaan tekniikan: ryhmittely.

Ryhmittely antaa sinun poimia yhteenvetotietoja tietokannasta. Sen avulla voit yhdistää tuloksia hyödyllisten tilastotietojen luomiseksi. Ryhmittely säästää sinua kirjoittamasta koodia yleisiin tapauksiin, kuten keskimääräisiin luvuihin. Ja se voi tehostaa järjestelmiä.

Mitä GROUP BY -lauseke tekee?

GROUP BY, kuten nimestä voi päätellä, ryhmittelee tulokset pienempään joukkoon. Tulokset koostuvat yhdestä rivistä kutakin erillistä ryhmätyn sarakkeen arvoa varten. Voimme näyttää sen käytön tarkastelemalla joitain näytetietoja riveillä, joilla on yhteisiä arvoja.

Seuraava on hyvin yksinkertainen tietokanta, jossa on kaksi taulukkolevyä edustavaa taulukkoa. Voit perustaa tällaisen tietokannan perusmallin kirjoittaminen valitsemallesi tietokantajärjestelmälle.

instagram viewer
albumit taulukossa on yhdeksän riviä pääavaimella id sarake ja sarakkeet nimen, artistin, julkaisuvuoden ja myynnin osalta:

++++++
| id | nimi | artist_id | julkaisuvuosi | myynti |
++++++
| 1 | Abbey Road | 1 | 1969 | 14 |
| 2 | Kuun pimeä puoli | 2 | 1973 | 24 |
| 3 | Huhut | 3 | 1977 | 28 |
| 4 | Ei koskaan 4 | 1991 | 17 |
| 5 | Eläimet | 2 | 1977 | 6 |
| 6 | Hyvästi keltainen tiiletie 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Lepakko helvetistä 7 | 1977 | 28 |
++++++

taiteilijoita taulukko on vielä yksinkertaisempi. Siinä on seitsemän riviä, joissa on tunnus- ja nimisarakkeet:

+++
| id | nimi |
+++
| 1 | Beatles |
| 2 | Pink Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirvana |
| 5 | Elton John |
| 6 | Adele |
| 7 | Lihakakku |
+++

Voit ymmärtää GROUP BY: n eri näkökohtia vain tällaisella yksinkertaisella tietojoukolla. Tietysti tosielämän tietojoukolla olisi paljon, paljon enemmän rivejä, mutta periaatteet pysyvät samoina.

Ryhmittely yhden sarakkeen mukaan

Oletetaan, että haluamme selvittää, kuinka monta albumia meillä on kullekin artistille. Aloita tyypillisestä VALITSE kysely artist_id -sarakkeen noutamiseksi:

VALITSE artistin_tunnus albumista

Tämä palauttaa kaikki yhdeksän riviä odotetusti:

++
| artist_id |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 2 |
| 5 |
| 6 |
| 6 |
| 7 |
++

Jos haluat ryhmitellä nämä tulokset taiteilijan mukaan, liitä lause GROUP BY artist_id:

Valitse artistin_tulos albumeista GROUP BY artist_id

Mikä antaa seuraavat tulokset:

++
| artist_id |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
++

Tulossarjassa on seitsemän riviä, vähennettynä yhdeksästä rivistä albumit pöytä. Jokainen ainutlaatuinen artist_id on yksi rivi. Lopuksi, saadaksesi todelliset määrät, lisää KREIVI(*) valittuihin sarakkeisiin:

VALITSE artistin_tunnus, COUNT (*)
Albumeista
GROUP BY artist_id
+++
| artist_id | LASKU (*) |
+++
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+++

Tulokset ryhmittelevät kaksi paririviä taiteilijoille, joilla on tunnus 2 ja 6. Jokaisella on kaksi albumia tietokannassamme.

Liittyvät: Essential SQL Commands -huijaussivu aloittelijoille

Ryhmiteltyjen tietojen käyttö aggregaattitoiminnolla

Olet ehkä käyttänyt KREIVI toiminto ennen, etenkin KREIVI(*) muodossa edellä esitetyllä tavalla. Se hakee joukon tulosten määrän. Sen avulla saat taulukon tietueiden kokonaismäärän:

Valitse COUNT (*) albumista
++
| LASKU (*) |
++
| 9 |
++

COUNT on koostefunktio. Tämä termi viittaa funktioihin, jotka muuntavat arvot useista riveistä yhdeksi arvoksi. Niitä käytetään usein GROUP BY -lausekkeen yhteydessä.

Sen sijaan, että laskemme vain rivien lukumäärän, voimme soveltaa koottua funktiota ryhmiteltyihin arvoihin:

SELECT artist_id, SUM (myynti)
Albumeista
GROUP BY artist_id
+++
| artist_id | SUMMA (myynti)
+++
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+++

Edellä esitetty taiteilijoiden 2 ja 6 kokonaismyynti on heidän monien albumiensa myynti yhteensä:

SELECT artist_id, myynti
Albumeista
WHERE artist_id IN (2, 6)
+++
| artist_id | myynti |
+++
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+++

Ryhmittely useiden sarakkeiden mukaan

Voit ryhmitellä useamman kuin yhden sarakkeen mukaan. Sisällytä vain useita sarakkeita tai lausekkeita pilkuilla erotettuna. Tulokset ryhmitellään näiden sarakkeiden yhdistelmän mukaan.

SELECT julkaisuvuosi, myynti, määrä (*)
Albumeista
GROUP BY -julkaisuvuosi, myynti

Tämä tuottaa tyypillisesti enemmän tuloksia kuin ryhmittely yhdellä sarakkeella:

++++
| julkaisuvuosi | myynti | määrä (*) |
++++
| 1969 | 14 | 1 |
| 1973 | 24 | 1 |
| 1977 | 28 | 2 |
| 1991 | 17 | 1 |
| 1977 | 6 | 1 |
| 1973 | 8 | 1 |
| 2011 | 25 | 1 |
| 2015 | 22 | 1 |
++++

Huomaa, että pienessä esimerkissämme vain kahdella albumilla on sama julkaisuvuosi ja myynti (28 vuonna 1977).

Hyödyllisiä aggregaattitoimintoja

COUNT: n lisäksi useat toiminnot toimivat hyvin GROUP: n kanssa. Kukin funktio palauttaa arvon jokaiseen tulosryhmään kuuluvien tietueiden perusteella.

  • COUNT () palauttaa vastaavien tietueiden kokonaismäärän.
  • SUM () palauttaa annettujen sarakkeiden kaikkien arvojen yhteenlasketun summan.
  • MIN () palauttaa pienimmän arvon tietyssä sarakkeessa.
  • MAX () palauttaa tietyn sarakkeen suurimman arvon.
  • AVG () palauttaa keskimääräisen keskiarvon. Se vastaa summaa () / COUNT ().

Voit käyttää näitä toimintoja myös ilman GROUP-lauseketta:

VALITSE AVG (myynti) albumeista
++
| AVG (myynti)
++
| 19.1111 |
++

GROUP BY: n käyttö WHERE-lauseella

Aivan kuten tavallisessa SELECT-ohjelmassa, voit silti käyttää WHERE-sovellusta tulosjoukon suodattamiseen:

VALITSE artistin_tunnus, COUNT (*)
Albumeista
Missä julkaisuvuosi> 1990
GROUP BY artist_id
+++
| artist_id | LASKU (*) |
+++
| 4 | 1 |
| 6 | 2 |
+++

Nyt sinulla on vain albumit, jotka on julkaistu vuoden 1990 jälkeen ja jotka on ryhmitelty taiteilijoiden mukaan. Voit käyttää liitosta WHERE-lausekkeen kanssa riippumatta GROUP BY: stä:

VALITSE r.name, COUNT (*) AS-albumia
Albumeista l, artistit r
WHERE artist_id = r.id
JA julkaisuvuosi> 1990
GROUP BY artist_id
+++
| nimi | albumit |
+++
| Nirvana | 1 |
| Adele | 2 |
+++

Huomaa kuitenkin, että jos yrität suodattaa yhdistetyn sarakkeen perusteella:

VALITSE r.name, COUNT (*) AS-albumia
Albumeista l, artistit r
WHERE artist_id = r.id
JA albumit> 2
GROUP BY artist_id;

Saat virheen:

VIRHE 1054 (42S22): Tuntematon sarake 'albumit' kohdassa 'missä lauseke'

Koontitietoihin perustuvat sarakkeet eivät ole WHERE-lausekkeen käytettävissä.

HAVING-lausekkeen käyttäminen

Joten miten suodatat tulosjoukon sen jälkeen, kun ryhmittely on tapahtunut? OVAT lauseke käsittelee tätä tarvetta:

VALITSE r.name, COUNT (*) AS-albumia
Albumeista l, artistit r
WHERE artist_id = r.id
GROUP BY artist_id
OVAT albumit> 1;

Huomaa, että HAVING-lauseke tulee GROUP BY: n jälkeen. Muuten se on pohjimmiltaan yksinkertainen WHERE: n korvaaminen HAVING: lla. Tulokset ovat:

+++
| nimi | albumit |
+++
| Pink Floyd | 2 |
| Adele | 2 |
+++

Voit silti käyttää WHERE-ehtoa suodattaa tulokset ennen ryhmittelyä. Se toimii yhdessä HAVING-lausekkeen kanssa suodattamiseksi ryhmittelyn jälkeen:

VALITSE r.name, COUNT (*) AS-albumia
Albumeista l, artistit r
WHERE artist_id = r.id
JA julkaisuvuosi> 1990
GROUP BY artist_id
OVAT albumit> 1;

Vain yksi taiteilija tietokannastamme julkaisi useamman kuin yhden albumin vuoden 1990 jälkeen:

+++
| nimi | albumit |
+++
| Adele | 2 |
+++

Tulosten yhdistäminen GROUP BY: n kanssa

GROUP BY -käsky on uskomattoman hyödyllinen osa SQL-kieltä. Se voi tarjota yhteenvetotietoja tiedoista, esimerkiksi sisältösivulle. Se on erinomainen vaihtoehto suurten tietomäärien hakemiselle. Tietokanta käsittelee tätä ylimääräistä työmäärää hyvin, koska sen suunnittelu tekee siitä optimaalisen työhön.

Kun ymmärrät ryhmittelyn ja kuinka yhdistää useita taulukoita, pystyt hyödyntämään suurimman osan relaatiotietokannan voimasta.

Sähköposti
Kuinka kysyä useita tietokantataulukoita kerralla SQL-liittymillä

Opi käyttämään SQL-liittymiä virtaviivaistamaan kyselyjä, säästämään aikaa ja tuntemaan itsesi SQL-tehokäyttäjäksi.

Liittyvät aiheet
  • Ohjelmointi
  • SQL
Kirjailijasta
Bobby Jack (28 artikkelia julkaistu)

Bobby on tekniikan harrastaja, joka työskenteli ohjelmistokehittäjänä kahden vuosikymmenen ajan. Hän on intohimoinen pelaamiseen, työskentelee Review Player -lehdessä Switch Player -lehdessä ja on upotettu verkkojulkaisun ja verkkokehityksen kaikkiin osa-alueisiin.

Lisää artistilta Bobby Jack

Tilaa uutiskirjeemme

Liity uutiskirjeeseemme, jossa on teknisiä vinkkejä, arvosteluja, ilmaisia ​​e-kirjoja ja erikoistarjouksia!

Vielä yksi askel !!!

Vahvista sähköpostiosoitteesi juuri lähettämässäsi sähköpostiviestissä.

.