Lielu daļu relāciju datu bāzu jaudas rada datu filtrēšana un tabulu apvienošana. Tāpēc mēs vispirms pārstāvam šīs attiecības. Bet mūsdienu datu bāzu sistēmas nodrošina vēl vienu vērtīgu tehniku: grupēšanu.
Grupēšana ļauj iegūt datu bāzes kopsavilkuma informāciju. Tas ļauj apvienot rezultātus, lai izveidotu noderīgus statistikas datus. Grupēšana ietaupa jūs no koda rakstīšanas bieži sastopamiem gadījumiem, piemēram, skaitļu vidējo aprēķināšanu. Un tas var padarīt efektīvākas sistēmas.
Ko dara klauzula GROUP BY?
GROUP BY, kā norāda nosaukums, rezultātus sagrupē mazākā komplektā. Rezultāti sastāv no vienas rindas katrai atšķirīgai grupētās kolonnas vērtībai. Mēs varam parādīt tā lietojumu, aplūkojot dažus datu paraugus ar rindām, kurām ir kopīgas vērtības.
Tālāk ir ļoti vienkārša datu bāze ar divām tabulām, kas attēlo ierakstu albumus. Jūs varat izveidot šādu datu bāzi, izmantojot rakstot pamata shēmu jūsu izvēlētajai datu bāzes sistēmai. The albumi tabulā ir deviņas rindas ar primāro atslēgu id kolonna un slejas vārdam, izpildītājam, izlaišanas gadam un pārdošanas apjomam:
++++++
| id | nosaukums | mākslinieks_id | atbrīvot_gadu | pārdošana |
++++++
| 1 | Abbey Road | 1 | 1969. gads 14 |
| 2 | Mēness tumšā puse | 2 | 1973. gads 24 |
| 3 | Baumas | 3 | 1977. gads 28 |
| 4 | Nekad neredzēt 4 | 1991 | 17 |
| 5 | Dzīvnieki 2 | 1977. gads 6 |
| 6 | Uz redzēšanos dzeltenā ķieģeļu ceļš 5 | 1973. gads 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Nūja no elles | 7 | 1977. gads 28 |
++++++
The mākslinieki tabula ir vēl vienkāršāka. Tam ir septiņas rindas ar kolonnām ID un nosaukums:
+++
| id | nosaukums |
+++
| 1 | Bītli
| 2 | Pink Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirvana |
| 5 | Eltons Džons |
| 6 | Adele |
| 7 | Gaļas maize |
+++
Jūs varat saprast dažādus GROUP BY aspektus, izmantojot tikai tādu vienkāršu datu kopu kā šis. Protams, reālās dzīves datu kopai būtu daudz, daudz vairāk rindu, taču principi paliek nemainīgi.
Grupēšana pēc vienas kolonnas
Pieņemsim, ka mēs vēlamies uzzināt, cik albumu mums ir katram izpildītājam. Sāciet ar tipisku SELECT vaicājums, lai ielādētu kolonnu artist_id:
Atlasiet izpildītāja_ID no albumiem
Tādējādi tiek atgrieztas visas deviņas rindas, kā paredzēts:
++
| mākslinieks_id |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 2 |
| 5 |
| 6 |
| 6 |
| 7 |
++
Lai grupētu šos rezultātus pēc izpildītāja, pievienojiet frāzi GROUP BY mākslinieks_id:
Atlasiet izpildītāja_ID no albumiem GROUP BY izpildītāja_ID
Kas dod šādus rezultātus:
++
| mākslinieks_id |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
++
Rezultātu komplektā ir septiņas rindas, kas ir samazinātas no kopējām deviņām rindā albumi tabula. Katrs unikāls mākslinieks_id ir viena rinda. Visbeidzot, lai iegūtu faktiskos skaitļus, pievienojiet COUNT (*) uz atlasītajām kolonnām:
Atlasīt izpildītāja_ID, COUNT (*)
NO albumiem
GROUP BY mākslinieks_id
+++
| mākslinieks_id | SKAITS (*) |
+++
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+++
Rezultāti grupē divus rindu pārus māksliniekiem ar ID 2 un 6. Katrā no tiem mūsu datubāzē ir divi albumi.
Saistīts: Essential SQL komandu krāpšanās lapa iesācējiem
Kā piekļūt sagrupētiem datiem ar apkopoto funkciju
Iespējams, esat izmantojis COUNT funkcija pirms tam, it īpaši COUNT (*) formā, kā redzams iepriekš. Tas iegūst rezultātu skaitu komplektā. To var izmantot, lai tabulā iegūtu kopējo ierakstu skaitu:
ATLASIET COUNT (*) NO albumiem
++
| SKAITS (*) |
++
| 9 |
++
COUNT ir apkopošanas funkcija. Šis termins attiecas uz funkcijām, kas pārvērš vērtības no vairākām rindām vienā vērtībā. Tos bieži lieto kopā ar paziņojumu GROUP BY.
Tā vietā, lai tikai skaitītu rindu skaitu, grupētām vērtībām varam piemērot apkopošanas funkciju:
SELECT artist_id, SUM (pārdošana)
NO albumiem
GROUP BY mākslinieks_id
+++
| mākslinieks_id | SUM (pārdošanas apjomi)
+++
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+++
Iepriekš parādītie 2. un 6. izpildītāja kopējie pārdošanas apjomi ir viņu vairāku albumu pārdošanas apjomi kopā:
SELECT artist_id, pārdošana
NO albumiem
WHERE artist_id IN (2, 6)
+++
| mākslinieks_id | pārdošana |
+++
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+++
Grupēšana pēc vairākām kolonnām
Jūs varat grupēt pēc vairākām kolonnām. Vienkārši iekļaujiet vairākas kolonnas vai izteicienus, atdalot tos ar komatiem. Rezultāti tiks grupēti atbilstoši šo kolonnu kombinācijai.
SELECT izlaiduma gads, izpārdošana, skaits (*)
NO albumiem
GROUP BY izlaidums_gads, izpārdošana
Parasti tas dos vairāk rezultātu nekā grupēšana pēc vienas kolonnas:
++++
| atbrīvot_gadu | pārdošana | skaits (*) |
++++
| 1969 | 14 | 1 |
| 1973 | 24 | 1 |
| 1977 | 28 | 2 |
| 1991 | 17 | 1 |
| 1977 | 6 | 1 |
| 1973 | 8 | 1 |
| 2011 | 25 | 1 |
| 2015 | 22 | 1 |
++++
Ņemiet vērā, ka mūsu mazajā piemērā tikai diviem albumiem ir vienāds izdošanas gads un pārdošanas skaits (28 1977. gadā).
Noderīgas apkopotās funkcijas
Papildus COUNT funkcija ar GROUP darbojas labi. Katra funkcija atgriež vērtību, pamatojoties uz ierakstiem, kas pieder katrai rezultātu grupai.
- COUNT () atgriež atbilstošo ierakstu kopējo skaitu.
- SUM () atgriež visu vērtību kopsummu dotajā kolonnā.
- MIN () atgriež mazāko vērtību attiecīgajā kolonnā.
- MAX () atgriež lielāko vērtību attiecīgajā kolonnā.
- AVG () atgriež vidējo vidējo vērtību. Tas ir SUM () / COUNT () ekvivalents.
Šīs funkcijas varat izmantot arī bez GROUP klauzulas:
ATLASIET AVG (pārdošanas) NO albumiem
++
| AVG (pārdošanas apjomi)
++
| 19.1111 |
++
GROUP BY izmantošana ar klauzulu WHERE
Tāpat kā ar parasto SELECT, joprojām varat izmantot WHERE, lai filtrētu rezultātu kopu:
Atlasīt izpildītāja_ID, COUNT (*)
NO albumiem
WHERE izlaiduma gads> 1990
GROUP BY mākslinieks_id
+++
| mākslinieks_id | SKAITS (*) |
+++
| 4 | 1 |
| 6 | 2 |
+++
Tagad jums ir tikai tie albumi, kas izdoti pēc 1990. gada, grupēti pēc mākslinieka. Jūs varat arī izmantot savienojumu ar klauzulu WHERE neatkarīgi no GROUP BY:
Atlasiet r.name, COUNT (*) AS albumus
NO albumiem l, mākslinieki r
WHERE artist_id = r.id
UN izlaišanas gads> 1990
GROUP BY mākslinieks_id
+++
| nosaukums | albumi |
+++
| Nirvana | 1 |
| Adele | 2 |
+++
Tomēr ņemiet vērā, ka, mēģinot filtrēt, pamatojoties uz apkopoto kolonnu:
Atlasiet r.name, COUNT (*) AS albumus
NO albumiem l, mākslinieki r
WHERE artist_id = r.id
UN albumi> 2
GROUP BY mākslinieks_id;
Jūs saņemsiet kļūdu:
KĻŪDA 1054 (42S22): nezināma sleja “albumi” sadaļā “kur klauzula”
Kolonnas, kas balstītas uz apkopotajiem datiem, klauzulai WHERE nav pieejamas.
Izmantojot klauzulu HAVING
Tātad, kā jūs filtrējat iestatīto rezultātu pēc grupēšanas? The IR klauzula attiecas uz šo vajadzību:
Atlasiet r.name, COUNT (*) AS albumus
NO albumiem l, mākslinieki r
WHERE artist_id = r.id
GROUP BY mākslinieks_id
AR albumiem> 1;
Ņemiet vērā, ka HAVING klauzula nāk pēc grupas GROUP. Pretējā gadījumā tas būtībā ir vienkāršs WHERE aizstāšana ar HAVING. Rezultāti ir:
+++
| nosaukums | albumi |
+++
| Pink Floyd | 2 |
| Adele | 2 |
+++
Jūs joprojām varat izmantot nosacījumu WHERE, lai filtrētu rezultātus pirms grupas. Filtrēšanai pēc grupēšanas tā darbosies kopā ar klauzulu HAVING:
Atlasiet r.name, COUNT (*) AS albumus
NO albumiem l, mākslinieki r
WHERE artist_id = r.id
UN izlaišanas gads> 1990
GROUP BY mākslinieks_id
AR albumiem> 1;
Tikai viens mākslinieks mūsu datubāzē pēc 1990. gada izdeva vairāk nekā vienu albumu:
+++
| nosaukums | albumi |
+++
| Adele | 2 |
+++
Rezultātu apvienošana ar GROUP BY
GROUP BY paziņojums ir neticami noderīga SQL valodas sastāvdaļa. Tas var sniegt datu kopsavilkuma informāciju, piemēram, par satura lapu. Tā ir lieliska alternatīva liela datu apjoma iegūšanai. Datu bāze labi izturas pret šo papildu slodzi, jo tās dizains padara to optimālu darbam.
Kad sapratīsit grupēšanu un to, kā savienot vairākas tabulas, varēsiet izmantot lielāko daļu relāciju datu bāzes jaudas.
Uzziniet, kā izmantot SQL pievienošanās, lai racionalizētu vaicājumus, ietaupītu laiku un liktu justies kā SQL enerģijas lietotājam.
- Programmēšana
- SQL
Bobijs ir tehnoloģiju entuziasts, kurš gandrīz divas desmitgades strādāja par programmatūras izstrādātāju. Viņš aizrauj spēles, strādā par atsauksmju redaktoru žurnālā Switch Player un ir iedziļinājies visos tiešsaistes izdevējdarbības un tīmekļa izstrādes aspektos.
Abonējiet mūsu biļetenu
Pievienojieties mūsu informatīvajam izdevumam par tehniskiem padomiem, atsauksmēm, bezmaksas e-grāmatām un ekskluzīviem piedāvājumiem!
Vēl viens solis !!!
Lūdzu, apstipriniet savu e-pasta adresi e-pastā, kuru tikko nosūtījām.