Velik dio moći relacijskih baza podataka dolazi od filtriranja podataka i spajanja tablica. Zbog toga mi u prvom redu predstavljamo te odnose. No moderni sustavi baza podataka pružaju još jednu vrijednu tehniku: grupiranje.

Grupiranje omogućuje izvlačenje sažetih podataka iz baze podataka. Omogućuje vam kombiniranje rezultata za stvaranje korisnih statističkih podataka. Grupiranje vas štedi od pisanja koda za uobičajene slučajeve kao što je prosječenje popisa slika. A može stvoriti i učinkovitije sustave.

Što čini klauzula GROUP BY?

GROUP BY, kao što i samo ime govori, grupira rezultate u manji skup. Rezultati se sastoje od jednog retka za svaku različitu vrijednost grupiranog stupca. Njegovu upotrebu možemo prikazati gledajući neke uzorke podataka s redovima koji dijele neke uobičajene vrijednosti.

Slijedi vrlo jednostavna baza podataka s dvije tablice koje predstavljaju albume zapisa. Takvu bazu podataka možete postaviti do pisanje osnovne sheme za odabrani sustav baza podataka. The

instagram viewer
albumi tablica ima devet redaka s primarnim ključem iskaznica stupac i stupci za ime, izvođača, godinu izdanja i prodaju:

++++++
| id | ime | artist_id | izdanje_godina | prodaja |
++++++
| 1 | Abbey Road | 1 | 1969 | 14 |
| 2 | Tamna strana Mjeseca | 2 | 1973 | 24 |
| 3 | Glasine | 3 | 1977 | 28 |
| 4 | Nema veze | 4 | 1991. | 17 |
| 5 | Životinje | 2 | 1977 | 6 |
| 6 | Zbogom Žuta cigla cesta | 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Šišmiš iz pakla | 7 | 1977 | 28 |
++++++

The umjetnici stol je još jednostavniji. Ima sedam redaka sa stupcima id i name:

+++
| id | ime |
+++
| 1 | The Beatles |
| 2 | Pink Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirvana |
| 5 | Elton John |
| 6 | Adele |
| 7 | Mesna štruca |
+++

Možete razumjeti različite aspekte GROUP BY samo jednostavnim skupom podataka kao što je ovaj. Naravno, skup podataka iz stvarnog života imao bi mnogo, puno više redaka, ali principi ostaju isti.

Grupiranje u jedan stupac

Recimo da želimo saznati koliko albuma imamo za svakog izvođača. Započnite s tipičnim IZABERI upit za dohvaćanje stupca artist_id:

ODABERITE artist_id IZ albuma

Ovo vraća svih devet redaka, kako se očekivalo:

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

Da biste umjetnike grupirali ove rezultate, dodajte izraz GRUPIRAJ po artist_id:

ODABERITE artist_id IZ albuma GROUP BY artist_id

Što daje sljedeće rezultate:

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

U nizu rezultata nalazi se sedam redaka, umanjenih od ukupnih devet u albumi stol. Svaka jedinstvena artist_id ima jedan red. Konačno, da biste dobili stvarni broj, dodajte RAČUNATI(*) u odabrane stupce:

ODABERI ID_izvođača, COUNT (*)
IZ albuma
GRUPIRAJ po artist_id
+++
| artist_id | BROJ (*) |
+++
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+++

Rezultati grupiraju dva para reda za umjetnike s ID-ovima 2 i 6. Svaki ima dva albuma u našoj bazi podataka.

Povezano: Osnovni varalice SQL naredbi za početnike

Kako pristupiti grupiranim podacima sa skupnom funkcijom

Možda ste koristili RAČUNATI funkcija prije, posebno u RAČUNATI(*) oblik kao što se vidi gore. Dohvaća broj rezultata u skupu. Pomoću njega možete dobiti ukupan broj zapisa u tablici:

ODABERITE BROJ (*) IZ albuma
++
| BROJ (*) |
++
| 9 |
++

COUNT je skupna funkcija. Ovaj se izraz odnosi na funkcije koje prevode vrijednosti iz više redaka u jednu vrijednost. Često se koriste zajedno s izjavom GROUP BY.

Umjesto da samo prebrojimo broj redaka, možemo primijeniti skupnu funkciju na grupirane vrijednosti:

ODABERI artist_id, SUM (prodaja)
IZ albuma
GRUPIRAJ po artist_id
+++
| artist_id | SUM (prodaja) |
+++
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+++

Ukupna prodaja prikazana gore za izvođače 2 i 6 ukupna je prodaja njihovih više albuma:

ODABERI artist_id, prodaja
IZ albuma
GDJE artist_id IN (2, 6)
+++
| artist_id | prodaja |
+++
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+++

Grupiranje po više stupaca

Možete grupirati u više stupaca. Samo uključite više stupaca ili izraza odvojenih zarezima. Rezultati će se grupirati prema kombinaciji ovih stupaca.

ODABERITE izdanje_godine, prodaje, brojanja (*)
IZ albuma
GROUP BY release_year, prodaja

To će obično dati više rezultata nego grupiranje u jedan stupac:

++++
| izdanje_godina | prodaja | brojati (*) |
++++
| 1969 | 14 | 1 |
| 1973 | 24 | 1 |
| 1977 | 28 | 2 |
| 1991 | 17 | 1 |
| 1977 | 6 | 1 |
| 1973 | 8 | 1 |
| 2011 | 25 | 1 |
| 2015 | 22 | 1 |
++++

Imajte na umu da u našem malom primjeru samo dva albuma imaju istu godinu izdanja i broj prodaja (28 u 1977).

Korisne skupne funkcije

Osim COUNT, nekoliko funkcija dobro funkcionira s GROUP. Svaka funkcija vraća vrijednost na temelju zapisa koji pripadaju svakoj skupini rezultata.

  • COUNT () vraća ukupan broj odgovarajućih zapisa.
  • SUM () vraća zbroj svih vrijednosti u danom zbrojenom stupcu.
  • MIN () vraća najmanju vrijednost u danom stupcu.
  • MAX () vraća najveću vrijednost u danom stupcu.
  • AVG () vraća srednji prosjek. To je ekvivalent SUM () / COUNT ().

Ove funkcije možete koristiti i bez klauzule GROUP:

ODABERITE AVG (prodaja) IZ albuma
++
| AVG (prodaja) |
++
| 19.1111 |
++

Korištenje GROUP BY s klauzulom WHERE

Kao i kod uobičajenog SELECT-a, i dalje možete koristiti WHERE za filtriranje skupa rezultata:

ODABERI ID_izvođača, COUNT (*)
IZ albuma
WHERE izdanje_godina> 1990
GRUPIRAJ po artist_id
+++
| artist_id | BROJ (*) |
+++
| 4 | 1 |
| 6 | 2 |
+++

Sada imate samo one albume objavljene nakon 1990., grupirane po izvođačima. Također možete koristiti pridruživanje s klauzulom WHERE, neovisno od GROUP BY:

SELECT r.name, COUNT (*) KAO albuma
IZ albuma l, umjetnici r
GDJE artist_id = r.id
I puštanje_godina> 1990
GRUPIRAJ po artist_id
+++
| ime | albumi |
+++
| Nirvana | 1 |
| Adele | 2 |
+++

Međutim, imajte na umu da ako pokušate filtrirati na temelju agregiranog stupca:

SELECT r.name, COUNT (*) KAO albuma
IZ albuma l, umjetnici r
GDJE artist_id = r.id
I albumi> 2
GRUPIRAJ po artist_id;

Dobit ćete pogrešku:

POGREŠKA 1054 (42S22): Nepoznati stupac "albumi" u "klauzuli"

Stupci temeljeni na skupnim podacima nisu dostupni klauzuli WHERE.

Upotreba klauzule HAVING

Pa, kako filtrirate skup rezultata nakon što je izvršeno grupiranje? The IMAJUĆI klauzula bavi se ovom potrebom:

SELECT r.name, COUNT (*) KAO albuma
IZ albuma l, umjetnici r
GDJE artist_id = r.id
GRUPIRAJ po artist_id
IMAJU albume> 1;

Napominjemo da klauzula HAVING dolazi iza GROUP BY. Inače, to je u osnovi jednostavna zamjena WHERE-a s HAVING. Rezultati su:

+++
| ime | albumi |
+++
| Pink Floyd | 2 |
| Adele | 2 |
+++

I dalje možete upotrijebiti uvjet WHERE za filtriranje rezultata prije grupiranja. Surađivat će s klauzulom HAVING za filtriranje nakon grupiranja:

SELECT r.name, COUNT (*) KAO albuma
IZ albuma l, umjetnici r
GDJE artist_id = r.id
I puštanje_godina> 1990
GRUPIRAJ po artist_id
IMAJU albume> 1;

Samo je jedan umjetnik u našoj bazi objavio više od jednog albuma nakon 1990.:

+++
| ime | albumi |
+++
| Adele | 2 |
+++

Kombiniranje rezultata s GROUP BY

Izjava GROUP BY nevjerojatno je koristan dio SQL jezika. Može pružiti sažete podatke, na primjer, za stranicu sa sadržajem. Izvrsna je alternativa dohvatu velike količine podataka. Baza podataka dobro se nosi s ovim dodatnim radnim opterećenjem, jer je sam dizajn čini optimalnom za posao.

Jednom kad shvatite grupiranje i kako spojiti više tablica, moći ćete iskoristiti većinu snage relacijske baze podataka.

E-mail
Kako odjednom upitivati ​​više tablica baza podataka pomoću SQL pridruživanja

Naučite kako koristiti SQL pridruživanja za pojednostavljivanje upita, uštedu vremena i stvaranje osjećaja kao SQL napredni korisnik.

Povezane teme
  • Programiranje
  • SQL
O autoru
Bobby Jack (Objavljeno 28 članaka)

Bobby je tehnološki entuzijast koji je većinu dva desetljeća radio kao programer softvera. Zaljubljen je u igre, radeći kao urednik recenzija u časopisu Switch Player, i uživan je u svim aspektima internetskog izdavanja i web razvoja.

Više od Bobbyja Jacka

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e-knjige i ekskluzivne ponude!

Još jedan korak…!

Potvrdite svoju e-adresu u e-pošti koju smo vam upravo poslali.

.