Suur osa relatsiooniliste andmebaaside võimsusest tuleneb andmete filtreerimisest ja tabelite ühendamisest. Seetõttu esindame neid suhteid esiteks. Kuid kaasaegsed andmebaasisüsteemid pakuvad veel ühte väärtuslikku tehnikat: grupeerimist.
Grupeerimine võimaldab teil andmebaasist kokkuvõtliku teabe välja võtta. See võimaldab teil tulemusi kombineerida kasulike statistiliste andmete loomiseks. Grupeerimine säästab teid tavaliste juhtumite, näiteks jooniste keskmiste arvutamise koodide kirjutamisest. Ja see võib muuta tõhusamaks süsteemid.
Mida teeb klausel GROUP BY?
GROUP BY, nagu nimigi ütleb, grupeerib tulemused väiksemaks. Tulemused koosnevad ühest reast rühmitatud veeru iga erineva väärtuse kohta. Selle kasutamist saame näidata, vaadates mõnda näidisandet ridadega, millel on ühised väärtused.
Järgnevalt on toodud väga lihtne andmebaas, kus on kaks plaati, mis tähistavad plaatalbumeid. Sellise andmebaasi saate seadistada põhiskeemi kirjutamine valitud andmebaasisüsteemi jaoks. The
albumid tabelis on üheksa põhivõtmega rida id veerg ja veerud nime, esitaja, väljalaskeaasta ja müügi kohta:++++++
| id | nimi | artist_id | vabastamisaasta | müük |
++++++
| 1 | Abbey tee | 1 | 1969 | 14 |
| 2 | Kuu varjukülg | 2 | 1973 | 24 |
| 3 | Kuulujutud | 3 | 1977 | 28 |
| 4 | Mitte kunagi | 4 | 1991 | 17 |
| 5 | Loomad 2 | 1977 | 6 |
| 6 | Hüvasti kollane tellistest tee | 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Nahkhiir põrgusest väljas 7 | 1977 | 28 |
++++++
The kunstnikud tabel on veelgi lihtsam. Sellel on seitse rida koos ID- ja nimeveergudega:
+++
| id | nimi |
+++
| 1 | The Beatles |
| 2 | Roosa Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirvana |
| 5 | Elton John |
| 6 | Adele |
| 7 | Liha päts |
+++
GROUP BY-i erinevatest aspektidest saate aru lihtsalt sellise lihtsa andmekogumi abil. Muidugi oleks reaalses elus andmekogumil palju-palju rohkem ridu, kuid põhimõtted jäävad samaks.
Grupeerimine ühe veeru järgi
Oletame, et tahame teada saada, mitu albumit meil iga artisti kohta on. Alustage tüüpilistest VALI päring veeru artist_id toomiseks:
Valige artist_id FROM albumitest
See tagastab ootuspäraselt kõik üheksa rida:
++
| artist_id |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 2 |
| 5 |
| 6 |
| 6 |
| 7 |
++
Nende tulemuste grupeerimiseks esitaja järgi lisage fraas GROUP BY artist_id:
Valige artist_id albumitest GROUP BY artist_id
Mis annab järgmised tulemused:
++
| artist_id |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
++
Tulemuskomplektis on seitse rida, mida on vähendatud üheksas reas albumid tabel. Iga kordumatu artist_id on üks rida. Lõpuks lisage tegelike arvude saamiseks COUNT (*) valitud veergudele:
SELECT artist_id, COUNT (*)
Albumitest
GROUP BY artist_id
+++
| artist_id | ARV (*) |
+++
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+++
Tulemused rühmitavad ID-dega esitajate jaoks kaks paari ridu 2 ja 6. Mõlemal on meie andmebaasis kaks albumit.
Seotud: Essential SQL Commands Cheat Sheet algajatele
Rühmitatud andmetele juurdepääs koondfunktsiooniga
Võib-olla olete seda kasutanud COUNT funktsiooni enne, eriti COUNT (*) ülaltoodud kujul. See toob tulemuste arvu komplektis. Selle abil saate tabelisse kirjete koguarvu saada:
VALI COUNT (*) albumitest
++
| ARV (*) |
++
| 9 |
++
COUNT on koondfunktsioon. See termin tähistab funktsioone, mis teisendavad väärtused mitmest reast üheks väärtuseks. Neid kasutatakse sageli koos väitega GROUP BY.
Selle asemel, et lihtsalt lugeda ridade arvu, saame grupeeritud väärtustele rakendada koondfunktsiooni:
SELECT artist_id, SUM (müük)
Albumitest
GROUP BY artist_id
+++
| artist_id | SUM (müük)
+++
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+++
Eespool näidatud esitajate 2 ja 6 kogumüük on nende mitme albumi müük kokku:
SELECT artist_id, müük
Albumitest
WHERE artist_id IN (2, 6)
+++
| artist_id | müük |
+++
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+++
Grupeerimine mitme veeru järgi
Saate rühmitada mitme veeru kaupa. Lisage lihtsalt mitu veergu või avaldist, eraldage need komadega. Tulemused rühmitatakse vastavalt nende veergude kombinatsioonile.
SELECT väljalaskeaasta, müük, arv (*)
Albumitest
RÜHMA JÄRGI vabastamise aasta, müük
See annab tavaliselt rohkem tulemusi kui rühmitamine ühe veeru järgi:
++++
| vabastamisaasta | müük | loend (*) |
++++
| 1969 | 14 | 1 |
| 1973 | 24 | 1 |
| 1977 | 28 | 2 |
| 1991 | 17 | 1 |
| 1977 | 6 | 1 |
| 1973 | 8 | 1 |
| 2011 | 25 | 1 |
| 2015 | 22 | 1 |
++++
Pange tähele, et meie väikeses näites on ainult kahel albumil sama väljaandmise aasta ja müügi arv (28 1977. aastal).
Kasulikud koondfunktsioonid
Peale COUNT töötab mitu funktsiooni GROUP-iga hästi. Iga funktsioon tagastab väärtuse, mis põhineb igale tulemuste rühmale kuuluvatel kirjetel.
- COUNT () tagastab sobivate kirjete koguarvu.
- SUM () tagastab antud veerus kõigi liidetud väärtuste koguarvu.
- MIN () tagastab antud veeru väikseima väärtuse.
- MAX () tagastab antud veeru suurima väärtuse.
- AVG () tagastab keskmise keskmise. See on samaväärne summaga SUM () / COUNT ().
Neid funktsioone saate kasutada ka ilma GROUP-klauslita:
VALI AVG (müük) albumitest
++
| AVG (müük) |
++
| 19.1111 |
++
GROUP BYi kasutamine WHERE klausliga
Nii nagu tavalise SELECTi puhul, saate ka tulemuste komplekti filtreerimiseks kasutada WHERE:
SELECT artist_id, COUNT (*)
Albumitest
KUS väljalaskeaasta> 1990
GROUP BY artist_id
+++
| artist_id | ARV (*) |
+++
| 4 | 1 |
| 6 | 2 |
+++
Nüüd on teil ainult need artistid rühmitatud albumid, mis on välja antud pärast 1990. aastat. Liitumist saab kasutada ka WHERE klausliga, grupist GROUP BY sõltumatult:
SELECT r.name, COUNT (*) AS albumit
Albumitest l, artistid r
KUS artist_id = r.id
JA vabastamise aasta> 1990
GROUP BY artist_id
+++
| nimi | albumid |
+++
| Nirvana | 1 |
| Adele | 2 |
+++
Pange tähele, et kui proovite filtreerida koondveeru põhjal:
SELECT r.name, COUNT (*) AS albumit
Albumitest l, artistid r
KUS artist_id = r.id
JA albumid> 2
GROUP BY artist_id;
Näete viga:
VIGA 1054 (42S22): tundmatu veerg „albumid” jaotises „kus klausel”
Summaandmetel põhinevad veerud ei ole WHERE klausli jaoks kättesaadavad.
HAVING-klausli kasutamine
Niisiis, kuidas filtreerida tulemuste komplekt pärast grupeerimist? The VÕIMALIK klausel käsitleb seda vajadust:
SELECT r.name, COUNT (*) AS albumit
Albumitest l, artistid r
KUS artist_id = r.id
GROUP BY artist_id
KUI albumid on> 1;
Pange tähele, et klausel HAVING järgneb grupile GROUP BY. Vastasel juhul on see sisuliselt WHERE asendamine HAVINGuga. Tulemused on järgmised:
+++
| nimi | albumid |
+++
| Roosa Floyd | 2 |
| Adele | 2 |
+++
Enne grupeerimist saate tulemuste filtreerimiseks siiski kasutada WHERE tingimust. Pärast rühmitamist filtreerimiseks töötab see HAVING-klausliga:
SELECT r.name, COUNT (*) AS albumit
Albumitest l, artistid r
KUS artist_id = r.id
JA vabastamise aasta> 1990
GROUP BY artist_id
KUI albumid on> 1;
Ainult üks meie andmebaasis olev artist andis pärast 1990. aastat välja rohkem kui ühe albumi:
+++
| nimi | albumid |
+++
| Adele | 2 |
+++
Tulemuste ühendamine GROUP BY-iga
GROUP BY-lause on uskumatult kasulik osa SQL-keelest. See võib anda andmete kokkuvõtlikku teavet, näiteks sisulehe kohta. See on suurepärane alternatiiv suurte andmehulkade toomisele. Andmebaas saab selle lisakoormusega hästi hakkama, kuna selle disain muudab selle töö jaoks optimaalseks.
Kui olete grupeerimisest aru saanud ja kuidas mitme tabeliga liituda, saate kasutada suuremat osa relatsiooniandmebaasi võimalustest.
Siit saate teada, kuidas kasutada SQL-i liitumisi päringute sujuvamaks muutmiseks, aja kokkuhoiuks ja SQL-i kasutajaks tundmiseks.
- Programmeerimine
- SQL
Bobby on tehnoloogiaentusiast, kes töötas tarkvaraarendajana peaaegu kaks aastakümmet. Ta on mängude vastu kirglik, töötab Switch Player Magazine'is arvustuste toimetajana ning on süvenenud veebiväljaannete ja veebiarenduse kõigisse aspektidesse.
Telli meie uudiskiri
Liituge meie uudiskirjaga, kus leiate tehnilisi näpunäiteid, ülevaateid, tasuta e-raamatuid ja eksklusiivseid pakkumisi!
Veel üks samm !!!
Palun kinnitage oma e-posti aadress meilis, mille me just saatsime.