Didžiąją reliacinių duomenų bazių galią suteikia duomenų filtravimas ir lentelių sujungimas. Štai kodėl mes pirmiausia atstovaujame tiems santykiams. Tačiau šiuolaikinės duomenų bazių sistemos suteikia dar vieną vertingą metodą: grupavimą.

Grupavimas leidžia išgauti suvestinę informaciją iš duomenų bazės. Tai leidžia sujungti rezultatus ir sukurti naudingus statistinius duomenis. Grupavimas taupo jus nuo kodo rašymo įprastiems atvejams, pvz., Vidutinių skaičių sąrašų. Tai gali padaryti efektyvesnes sistemas.

Ką daro sąlyga „GROUP BY“?

„GROUP BY“, kaip rodo pavadinimas, grupuoja rezultatus į mažesnį rinkinį. Rezultatus sudaro viena eilutė kiekvienai atskirai sugrupuoto stulpelio vertei. Mes galime parodyti jo naudojimą, žiūrėdami kai kuriuos duomenų pavyzdžius su eilutėmis, turinčiomis bendras vertes.

Toliau pateikiama labai paprasta duomenų bazė su dviem lentelėmis, vaizduojančiomis įrašų albumus. Galite sukurti tokią duomenų bazę pagrindinės schemos rašymas jūsų pasirinktai duomenų bazės sistemai. The

instagram viewer
albumai lentelėje yra devynios eilutės su pagrindiniu raktu id vardo, atlikėjo, išleidimo metų ir pardavimo stulpeliai ir stulpeliai:

++++++
| id | vardas | artist_id | išleidimo_metas | pardavimai |
++++++
| 1 | Abatijos kelias | 1 | 1969 | 14 |
| 2 | Tamsioji mėnulio pusė 2 | 1973 | 24 |
| 3 | Gandai | 3 | 1977 | 28 |
| 4 | Niekada ne 4 | 1991 | 17 |
| 5 | Gyvūnai | 2 | 1977 | 6 |
| 6 | Sudie geltonų plytų keliu 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Šikšnosparnis iš pragaro | 7 | 1977 | 28 |
++++++

The menininkai stalas yra dar paprastesnis. Jame yra septynios eilutės su ID ir vardo stulpeliais:

+++
| id | vardas |
+++
| 1 | „The Beatles“
| 2 | Pink Floyd |
| 3 | „Fleetwood Mac“
| 4 | Nirvana |
| 5 | Eltonas Johnas |
| 6 | Adele |
| 7 | Mėsos kepalas |
+++

Galite suprasti įvairius „GROUP BY“ aspektus naudodamiesi tokiu paprastu duomenų rinkiniu kaip šis. Žinoma, realaus gyvenimo duomenų rinkinyje būtų daug daug daugiau eilučių, tačiau principai išlieka tie patys.

Grupavimas pagal vieną stulpelį

Tarkime, norime sužinoti, kiek albumų turime kiekvienam atlikėjui. Pradėkite nuo įprasto PASIRINKTI užklausa, norint gauti stulpelį artist_id:

PASIRINKITE atlikėjo_ID iš albumų

Tai grąžina visas devynias eilutes, kaip tikėtasi:

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

Norėdami sugrupuoti šiuos rezultatus pagal atlikėją, pridėkite frazę GROUP BY artist_id:

PASIRINKITE atlikėjo ID iš albumų

Tai duoda šiuos rezultatus:

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

Rezultatų rinkinyje yra septyni eilutės, sumažintos nuo visų devynių albumai stalo. Kiekvienas unikalus artist_id turi vieną eilę. Galiausiai, norėdami gauti faktinį skaičių, pridėkite COUNT (*) į pasirinktus stulpelius:

PASIRINKITE atlikėjo ID, COUNT (*)
IŠ albumų
GROUP BY artist_id
+++
| artist_id | SKAIČIUS (*) |
+++
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+++

Rezultatai grupuoja dvi menininkų, turinčių ID, eilučių poras 2 ir 6. Kiekvienas iš jų turi du albumus mūsų duomenų bazėje.

Susijęs: „Essential SQL Commands Cheat Sheet“ pradedantiesiems

Kaip pasiekti sugrupuotus duomenis naudojant agregato funkciją

Gali būti, kad naudojatės COUNT funkciją anksčiau, ypač COUNT (*) forma, kaip matyti aukščiau. Jis gauna rezultatų skaičių rinkinyje. Galite jį naudoti, kad gautumėte bendrą lentelės įrašų skaičių:

PASIRINKITE COUNT (*) IŠ albumų
++
| SKAIČIUS (*) |
++
| 9 |
++

COUNT yra suvestinė funkcija. Šis terminas reiškia funkcijas, kurios vertes iš kelių eilučių paverčia viena verte. Jie dažnai naudojami kartu su „GROUP BY“ sakiniu.

Užuot skaičiavę tik eilučių skaičių, grupuotoms vertėms galime taikyti suvestinę funkciją:

SELECT artist_id, SUM (pardavimas)
IŠ albumų
GROUP BY artist_id
+++
| artist_id | SUM (pardavimai)
+++
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+++

Visi aukščiau parodyti 2 ir 6 atlikėjų pardavimai yra jų kelių albumų pardavimas kartu:

PASIRINKITE atlikėjo ID, pardavimai
IŠ albumų
WHERE artist_id IN (2, 6)
+++
| artist_id | pardavimai |
+++
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+++

Grupavimas pagal kelis stulpelius

Galite grupuoti pagal daugiau nei vieną stulpelį. Tiesiog įtraukite kelis stulpelius ar posakius, atskirtus kableliais. Rezultatai bus grupuojami pagal šių stulpelių derinį.

SELECT spaudos metai, pardavimai, skaičius (*)
IŠ albumų
PAGAL GRUP release išleidimo_metai, pardavimas

Paprastai tai duos daugiau rezultatų nei grupuojant pagal vieną stulpelį:

++++
| išleidimo_metas | pardavimai | skaičius (*) |
++++
| 1969 | 14 | 1 |
| 1973 | 24 | 1 |
| 1977 | 28 | 2 |
| 1991 | 17 | 1 |
| 1977 | 6 | 1 |
| 1973 | 8 | 1 |
| 2011 | 25 | 1 |
| 2015 | 22 | 1 |
++++

Atkreipkite dėmesį, kad mūsų mažame pavyzdyje tik du albumai turi tuos pačius išleidimo metus ir pardavimų skaičių (1977 m. - 28).

Naudingos suvestinės funkcijos

Be COUNT, „GROUP“ puikiai veikia kelios funkcijos. Kiekviena funkcija grąžina vertę pagal įrašus, priklausančius kiekvienai rezultatų grupei.

  • COUNT () pateikia bendrą atitinkančių įrašų skaičių.
  • SUM () pateikia visų nurodyto stulpelio reikšmių sumą.
  • MIN () grąžina mažiausią nurodyto stulpelio vertę.
  • MAX () pateikia didžiausią nurodyto stulpelio vertę.
  • AVG () pateikia vidutinį vidurkį. Tai yra SUM () / COUNT () atitikmuo.

Šias funkcijas taip pat galite naudoti be grupės sąlygos:

PASIRINKITE AVG (pardavimo) IŠ Albumų
++
| AVG (pardavimai)
++
| 19.1111 |
++

Grupės BY naudojimas su WHERE sąlyga

Kaip ir naudojant įprastą SELECT, vis tiek galite naudoti WHERE rezultatų rinkiniui filtruoti:

PASIRINKITE atlikėjo ID, COUNT (*)
IŠ albumų
WHERE release_year> 1990 m
GROUP BY artist_id
+++
| artist_id | SKAIČIUS (*) |
+++
| 4 | 1 |
| 6 | 2 |
+++

Dabar turite tik tuos albumus, kurie buvo išleisti po 1990 m., Sugrupuoti pagal atlikėjus. Taip pat galite naudoti sujungimą su WHERE sąlyga, nepriklausomai nuo grupės „GROUP BY“:

PASIRINKITE r.name, COUNT (*) AS albumus
IŠ albumų l, atlikėjai r
WHERE artist_id = r.id
IR išleidimo_metai> 1990 m
GROUP BY artist_id
+++
| vardas | albumai |
+++
| Nirvana | 1 |
| Adele | 2 |
+++

Tačiau atminkite, kad jei bandote filtruoti pagal sukauptą stulpelį:

PASIRINKITE r.name, COUNT (*) AS albumus
IŠ albumų l, atlikėjai r
WHERE artist_id = r.id
IR albumai> 2
GROUP BY artist_id;

Gausite klaidą:

KLAIDA 1054 (42S22): Nežinomas stulpelis „albumai“ lauke „where clause“

Stulpeliai, pagrįsti apibendrintais duomenimis, nėra prieinami sąlygai WHERE.

Naudojant HAVING sąlygą

Taigi, kaip filtruoti rezultatų rinkinį, įvykus grupavimui? The TURI sąlyga nagrinėja šį poreikį:

PASIRINKITE r.name, COUNT (*) AS albumus
IŠ albumų l, atlikėjai r
WHERE artist_id = r.id
GROUP BY artist_id
TURI albumų> 1;

Atkreipkite dėmesį, kad HAVING sąlyga yra po GROUP BY. Kitu atveju tai iš esmės yra paprastas WHERE pakeitimas turėjimu. Rezultatai:

+++
| vardas | albumai |
+++
| Pink Floyd | 2 |
| Adele | 2 |
+++

Vis tiek galite naudoti sąlygą WHERE, kad filtruotumėte rezultatus prieš grupavimą. Jis veiks kartu su HAVING sąlyga filtravimui po grupės:

PASIRINKITE r.name, COUNT (*) AS albumus
IŠ albumų l, atlikėjai r
WHERE artist_id = r.id
IR išleidimo_metai> 1990 m
GROUP BY artist_id
TURI albumų> 1;

Tik vienas atlikėjas mūsų duomenų bazėje išleido daugiau nei vieną albumą po 1990 m.

+++
| vardas | albumai |
+++
| Adele | 2 |
+++

Rezultatų derinimas su GROUP BY

GROUP BY sakinys yra nepaprastai naudinga SQL kalbos dalis. Tai gali pateikti duomenų santrauką, pavyzdžiui, apie turinio puslapį. Tai puiki alternatyva gauti didelius duomenų kiekius. Duomenų bazė gerai įveikia šį papildomą darbo krūvį, nes pats dizainas leidžia optimaliai atlikti darbą.

Supratę grupavimą ir kaip sujungti kelias lenteles, galėsite išnaudoti didžiąją dalį reliacinės duomenų bazės galios.

El
Kaip vienu metu pateikti užklausą kelioms duomenų bazių lentelėms, prisijungus prie SQL

Sužinokite, kaip naudoti SQL prisijungimus, norint supaprastinti užklausas, sutaupyti laiko ir pasijusti SQL galios vartotoju.

Susijusios temos
  • Programavimas
  • SQL
Apie autorių
Bobis Džekas (Paskelbti 28 straipsniai)

Bobis yra technologijų entuziastas, kuris beveik du dešimtmečius dirbo programinės įrangos kūrėju. Jis aistringai žaidžia, dirba „Review Player“ žurnalo apžvalgų redaktoriumi ir yra pasinėręs į visus internetinės leidybos ir interneto kūrimo aspektus.

Daugiau iš Bobby Jacko

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kuriame rasite techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Dar vienas žingsnis…!

Prašome patvirtinti savo el. Pašto adresą el. Laiške, kurį jums ką tik išsiuntėme.

.