Velik del moči relacijskih baz podatkov izhaja iz filtriranja podatkov in združevanja tabel. Zato te odnose predstavljamo v prvi vrsti. Toda sodobni sistemi baz podatkov ponujajo še eno dragoceno tehniko: združevanje.
Združevanje v skupine vam omogoča, da iz baze podatkov izvlečete povzetke informacij. Omogoča vam kombiniranje rezultatov za ustvarjanje koristnih statističnih podatkov. Združevanje vas prihrani pri pisanju kode za pogoste primere, kot je povprečenje seznamov številk. Lahko pa tudi učinkovitejše sisteme.
Kaj počne klavzula GROUP BY?
GROUP BY, kot že ime pove, združuje rezultate v manjši nabor. Rezultati so sestavljeni iz ene vrstice za vsako različno vrednost združenega stolpca. Njegovo uporabo lahko prikažemo tako, da si ogledamo nekaj vzorčnih podatkov z vrsticami, ki imajo nekatere skupne vrednosti.
Sledi zelo preprosta zbirka podatkov z dvema tabelama, ki predstavljata plošče albumov. Takšno bazo podatkov lahko nastavite do pisanje osnovne sheme za izbrani sistem zbirke podatkov. The
albumov tabela ima devet vrstic s primarnim ključem id stolpec in stolpci za ime, izvajalca, leto izdaje in prodajo:++++++
| id | ime | artist_id | javnost_leto | prodaja |
++++++
| 1 | Abbey Road | 1 | 1969 | 14 |
| 2 | Temna stran Lune | 2 | 1973 | 24 |
| 3 | Govorice | 3 | 1977 | 28 |
| 4 | Vseeno | 4 | 1991 | 17 |
| 5 | Živali | 2 | 1977 | 6 |
| 6 | Zbogom rumena opečna cesta | 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Netopir iz pekla | 7 | 1977 | 28 |
++++++
The umetniki miza je še bolj preprosta. Ima sedem vrstic s stolpci id in ime:
+++
| id | ime |
+++
| 1 | The Beatles |
| 2 | Pink Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirvana |
| 5 | Elton John |
| 6 | Adele |
| 7 | Mesna štruca |
+++
Različne vidike GROUP BY lahko razumete le s preprostim naborom podatkov, kot je ta. Seveda bi nabor podatkov iz resničnega življenja imel veliko, veliko več vrstic, vendar načela ostajajo enaka.
Združevanje v en sam stolpec
Recimo, da želimo izvedeti, koliko albumov imamo za vsakega izvajalca. Začnite s tipičnim IZBERI poizvedba za pridobitev stolpca artist_id:
IZBERI ID_izvajalca IZ albumov
To po pričakovanju vrne vseh devet vrstic:
++
| artist_id |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 2 |
| 5 |
| 6 |
| 6 |
| 7 |
++
Če želite umetnika združiti te rezultate, dodajte stavek GROUP BY artist_id:
IZBERI artist_id IZ albumov GROUP BY artist_id
Kar daje naslednje rezultate:
++
| artist_id |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
++
V naboru rezultatov je sedem vrstic, zmanjšanih od vseh devetih v albumov tabela. Vsak unikat artist_id ima eno vrstico. Na koncu, da dobite dejansko štetje, dodajte ŠTEVILO (*) v izbrane stolpce:
IZBERI ID_izvajalca, COUNT (*)
IZ albumov
GROUP BY artist_id
+++
| artist_id | ŠTEVILO (*) |
+++
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+++
Rezultati združijo dva para vrstic za umetnike z ID-ji 2 in 6. Vsak ima v svoji bazi dva albuma.
Sorodno: Essential SQL Commands Cheat Sheet za začetnike
Kako dostopati do združenih podatkov s skupno funkcijo
Morda ste uporabili ŠT funkcijo pred, zlasti v ŠTEVILO (*) obliki, kot je razvidno zgoraj. Pridobi število rezultatov v nizu. Z njim lahko dobite skupno število zapisov v tabeli:
IZBERI ŠTEVILO (*) IZ albumov
++
| ŠTEVILO (*) |
++
| 9 |
++
COUNT je sestavljena funkcija. Ta izraz se nanaša na funkcije, ki vrednosti iz več vrstic prevedejo v eno vrednost. Pogosto se uporabljajo skupaj z izjavo GROUP BY.
Namesto samo štetja števila vrstic lahko združimo funkcijo za združene vrednosti:
IZBERI artist_id, SUM (prodaja)
IZ albumov
GROUP BY artist_id
+++
| artist_id | SUM (prodaja) |
+++
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+++
Skupna prodaja, prikazana zgoraj za izvajalce 2 in 6, je prodaja njihovih več albumov skupaj:
IZBERI artist_id, prodaja
IZ albumov
WHERE artist_id IN (2, 6)
+++
| artist_id | prodaja |
+++
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+++
Združevanje po več stolpcih
Razvrstite lahko v več stolpcev. Samo vključite več stolpcev ali izrazov, ločenih z vejicami. Rezultati bodo razvrščeni glede na kombinacijo teh stolpcev.
SELECT release_year, prodaja, štetje (*)
IZ albumov
GROUP BY release_year, prodaja
To bo običajno dalo več rezultatov kot združevanje v en stolpec:
++++
| javnost_leto | prodaja | štetje (*) |
++++
| 1969 | 14 | 1 |
| 1973 | 24 | 1 |
| 1977 | 28 | 2 |
| 1991 | 17 | 1 |
| 1977 | 6 | 1 |
| 1973 | 8 | 1 |
| 2011 | 25 | 1 |
| 2015 | 22 | 1 |
++++
Upoštevajte, da imata v našem majhnem primeru samo dva albuma isto leto izdaje in število prodaj (28 leta 1977).
Uporabne sestavljene funkcije
Razen COUNT, več funkcij dobro deluje s skupino GROUP. Vsaka funkcija vrne vrednost na podlagi zapisov, ki pripadajo posamezni skupini rezultatov.
- COUNT () vrne skupno število ujemajočih se zapisov.
- SUM () vrne seštevek vseh vrednosti v danem stolpcu.
- MIN () vrne najmanjšo vrednost v danem stolpcu.
- MAX () vrne največjo vrednost v danem stolpcu.
- AVG () vrne povprečje povprečja. To je ekvivalent SUM () / COUNT ().
Te funkcije lahko uporabljate tudi brez klavzule GROUP:
IZBERITE AVG (prodaja) IZ albumov
++
| AVG (prodaja) |
++
| 19.1111 |
++
Uporaba GROUP BY s klavzulo WHERE
Tako kot pri običajnem SELECT-u, lahko še vedno uporabite WHERE za filtriranje nabora rezultatov:
IZBERI ID_izvajalca, COUNT (*)
IZ albumov
WHERE release_year> 1990
GROUP BY artist_id
+++
| artist_id | ŠTEVILO (*) |
+++
| 4 | 1 |
| 6 | 2 |
+++
Zdaj imate samo tiste albume, izdane po letu 1990, razvrščene po izvajalcih. Pridružite se lahko tudi s stavkom WHERE, neodvisno od GROUP BY:
SELECT r.name, COUNT (*) AS albumov
IZ albumov l, umetniki r
KJE umetnik_id = r.id
IN release_year> 1990
GROUP BY artist_id
+++
| ime | albumi |
+++
| Nirvana | 1 |
| Adele | 2 |
+++
Upoštevajte pa, da če poskušate filtrirati na podlagi združenega stolpca:
SELECT r.name, COUNT (*) AS albumov
IZ albumov l, umetniki r
KJE umetnik_id = r.id
IN albumi> 2
GROUP BY artist_id;
Prejeli boste napako:
NAPAKA 1054 (42S22): Neznan stolpec "albumi" v "klavzuli"
Stolpci, ki temeljijo na zbirnih podatkih, niso na voljo klavzuli WHERE.
Uporaba klavzule HAVING
Torej, kako filtrirate nabor rezultatov po opravljenem združevanju? The IMAJO klavzula obravnava to potrebo:
SELECT r.name, COUNT (*) AS albumov
IZ albumov l, umetniki r
KJE umetnik_id = r.id
GROUP BY artist_id
IMAJO albumov> 1;
Upoštevajte, da stavek HAVING pride za GROUP BY. V nasprotnem primeru gre v bistvu za preprosto zamenjavo WHERE s HAVING. Rezultati so:
+++
| ime | albumi |
+++
| Pink Floyd | 2 |
| Adele | 2 |
+++
Še vedno lahko uporabite pogoj WHERE za filtriranje rezultatov pred razvrščanjem v skupine. Delovalo bo skupaj s stavkom HAVING za filtriranje po razvrščanju v skupine:
SELECT r.name, COUNT (*) AS albumov
IZ albumov l, umetniki r
KJE umetnik_id = r.id
IN release_year> 1990
GROUP BY artist_id
IMAJO albumov> 1;
Samo en izvajalec v naši zbirki podatkov je izdal več kot en album po letu 1990:
+++
| ime | albumi |
+++
| Adele | 2 |
+++
Združevanje rezultatov z GROUP BY
Izjava GROUP BY je neverjetno uporaben del jezika SQL. Ponuja lahko na primer povzetek podatkov, na primer za stran z vsebino. Je odlična alternativa pridobivanju velikih količin podatkov. Baza podatkov dobro obvladuje to dodatno delovno obremenitev, saj je zaradi same zasnove optimalna za delo.
Ko boste razumeli razvrščanje v skupine in kako združiti več tabel, boste lahko izkoristili večino moči relacijske baze podatkov.
Naučite se, kako lahko z združitvami SQL poenostavite poizvedbe, prihranite čas in se počutite kot močan uporabnik SQL.
- Programiranje
- SQL
Bobby je tehnološki navdušenec, ki je več kot dve desetletji delal kot razvijalec programske opreme. Navdušen je nad igranjem iger, dela kot urednik mnenj pri reviji Switch Player in je poglobljen v vse vidike spletnega založništva in spletnega razvoja.
Naročite se na naše novice
Pridružite se našemu glasilu za tehnične nasvete, preglede, brezplačne e-knjige in ekskluzivne ponudbe!
Še en korak…!
Potrdite svoj e-poštni naslov v e-poštnem sporočilu, ki smo vam ga pravkar poslali.