Viss, kas jums jāzina par SQL GROUP BY paziņojumu

Viss, kas jums jāzina par SQL GROUP BY paziņojumu

Liela daļa relāciju datu bāzu jaudas rodas, filtrējot datus un savienojot tabulas. 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 paņēmienu: grupēšanu.





Grupēšana ļauj iegūt kopsavilkuma informāciju no datu bāzes. 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ējiem sarakstiem. Un tas var radīt efektīvākas sistēmas.





Ko dara klauzula GROUP BY?

GROUP BY, kā norāda nosaukums, grupē rezultātus mazākā komplektā. Rezultāti sastāv no vienas rindas katrai grupētās kolonnas atšķirīgajai vērtībai. Mēs varam parādīt tā izmantošanu, aplūkojot dažus datu paraugus ar rindām, kurām ir kopīgas vērtības.





labākais veids, kā skenēt daudz fotoattēlu

Tālāk ir sniegta ļ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 uzrakstot pamata shēmu jūsu izvēlētajai datu bāzes sistēmai. The albumus 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šanai:

+----+---------------------------+-----------+--------------+-------+
| id | name | artist_id | release_year | sales |
+----+---------------------------+-----------+--------------+-------+
| 1 | Abbey Road | 1 | 1969 | 14 |
| 2 | The Dark Side of the Moon | 2 | 1973 | 24 |
| 3 | Rumours | 3 | 1977 | 28 |
| 4 | Nevermind | 4 | 1991 | 17 |
| 5 | Animals | 2 | 1977 | 6 |
| 6 | Goodbye Yellow Brick Road | 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Bat Out of Hell | 7 | 1977 | 28 |
+----+---------------------------+-----------+--------------+-------+

The mākslinieki tabula ir vēl vienkāršāka. Tam ir septiņas rindas ar ID un nosaukumu kolonnām:



+----+---------------+
| id | name |
+----+---------------+
| 1 | The Beatles |
| 2 | Pink Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirvana |
| 5 | Elton John |
| 6 | Adele |
| 7 | Meat Loaf |
+----+---------------+

Jūs varat saprast dažādus GROUP BY aspektus, izmantojot vienkāršu datu kopu, piemēram, šo. Protams, reālās dzīves datu kopā būtu daudz, daudz vairāk rindu, taču principi paliek nemainīgi.

Grupēšana pēc vienas kolonnas

Pieņemsim, ka vēlamies noskaidrot, cik albumu mums ir katram izpildītājam. Sāciet ar tipisku SELECT vaicājums, lai ielādētu kolonnu artist_id:





SELECT artist_id FROM albums

Tas atgriež visas deviņas rindas, kā paredzēts:

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

Lai grupētu šos rezultātus pēc mākslinieka, pievienojiet frāzi GROUP BY artist_id :





SELECT artist_id FROM albums GROUP BY artist_id

Kas dod šādus rezultātus:

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

Rezultātu kopā ir septiņas rindas, kas ir samazinātas no kopējām deviņām albumus tabula. Katrs unikāls mākslinieka ID ir viena rinda. Visbeidzot, lai iegūtu faktisko skaitu, pievienojiet COUNT (*) atlasītajām kolonnām:

SELECT artist_id, COUNT(*)
FROM albums
GROUP BY artist_id
+-----------+----------+
| artist_id | COUNT(*) |
+-----------+----------+
| 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 . Katram ir divi albumi mūsu datu bāzē.

Saistīts: Būtisko SQL komandu apkrāptu lapa iesācējiem

Kā piekļūt grupētiem datiem, izmantojot apkopotu funkciju

Jūs, iespējams, izmantojāt COUNT funkciju, jo ī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:

SELECT COUNT(*) FROM albums
+----------+
| COUNT(*) |
+----------+
| 9 |
+----------+

COUNT ir apkopojuma funkcija. Šis termins attiecas uz funkcijām, kas tulko vērtības no vairākām rindām vienā vērtībā. Tos bieži izmanto kopā ar paziņojumu GROUP BY.

Tā vietā, lai tikai saskaitītu rindu skaitu, grupētajām vērtībām varam izmantot apkopošanas funkciju:

SELECT artist_id, SUM(sales)
FROM albums
GROUP BY artist_id
+-----------+------------+
| artist_id | SUM(sales) |
+-----------+------------+
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+-----------+------------+

Kopējie iepriekš parādītie 2. un 6. mākslinieku pārdošanas apjomi ir viņu vairāku albumu pārdošanas apjomi kopā:

SELECT artist_id, sales
FROM albums
WHERE artist_id IN (2, 6)
+-----------+-------+
| artist_id | sales |
+-----------+-------+
| 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 izteiksmes, atdalot tās ar komatiem. Rezultāti tiks grupēti atbilstoši šo kolonnu kombinācijai.

SELECT release_year, sales, count(*)
FROM albums
GROUP BY release_year, sales

Tas parasti dos vairāk rezultātu nekā grupēšana pēc vienas kolonnas:

+--------------+-------+----------+
| release_year | sales | count(*) |
+--------------+-------+----------+
| 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 nelielajā piemērā tikai diviem albumiem ir vienāds izdošanas gads un pārdošanas apjoms (1977. gadā - 28).

Noderīgas apkopojuma funkcijas

Papildus COUNT, vairākas funkcijas labi darbojas kopā ar GROUP. Katra funkcija atgriež vērtību, pamatojoties uz ierakstiem, kas pieder katrai rezultātu grupai.

  • COUNT () atgriež kopējo atbilstošo ierakstu skaitu.
  • SUM () atgriež visu dotās slejas vērtību kopsummu.
  • MIN () atgriež mazāko vērtību noteiktā kolonnā.
  • MAX () atgriež lielāko vērtību attiecīgajā kolonnā.
  • AVG () atgriež vidējo vidējo. Tas ir līdzvērtīgs SUM () / COUNT ().

Šīs funkcijas varat izmantot arī bez GROUP klauzulas:

kā apturēt hromu no tik daudz atmiņas
SELECT AVG(sales) FROM albums
+------------+
| AVG(sales) |
+------------+
| 19.1111 |
+------------+

GROUP BY izmantošana ar WHERE klauzulu

Tāpat kā ar parasto SELECT, jūs joprojām varat izmantot WHERE, lai filtrētu rezultātu kopu:

SELECT artist_id, COUNT(*)
FROM albums
WHERE release_year > 1990
GROUP BY artist_id
+-----------+----------+
| artist_id | COUNT(*) |
+-----------+----------+
| 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 savienošanu ar klauzulu WHERE neatkarīgi no GROUP BY:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND release_year > 1990
GROUP BY artist_id
+---------+--------+
| name | albums |
+---------+--------+
| Nirvana | 1 |
| Adele | 2 |
+---------+--------+

Tomēr ņemiet vērā: ja mēģināt filtrēt, pamatojoties uz apkopotu kolonnu:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND albums > 2
GROUP BY artist_id;

Jūs saņemsit kļūdu:

ERROR 1054 (42S22): Unknown column 'albums' in 'where clause'

Sadaļas, kuru pamatā ir apkopotie dati, nav pieejamas klauzulai WHERE.

Izmantojot klauzulu HAVING

Tātad, kā filtrēt rezultātu kopu pēc grupēšanas? The Ņemot klauzula attiecas uz šo vajadzību:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
GROUP BY artist_id
HAVING albums > 1;

Ņemiet vērā, ka klauzula HAVING nāk pēc GROUP BY. Pretējā gadījumā tā būtībā ir vienkārša WHERE aizstāšana ar HAVING. Rezultāti ir šādi:

+------------+--------+
| name | albums |
+------------+--------+
| Pink Floyd | 2 |
| Adele | 2 |
+------------+--------+

Jūs joprojām varat izmantot nosacījumu WHERE, lai filtrētu rezultātus pirms grupēšanas. Tas darbosies kopā ar klauzulu HAVING filtrēšanai pēc grupēšanas:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND release_year > 1990
GROUP BY artist_id
HAVING albums > 1;

Tikai viens mākslinieks mūsu datu bāzē pēc 1990. gada izdeva vairāk nekā vienu albumu:

+-------+--------+
| name | albums |
+-------+--------+
| Adele | 2 |
+-------+--------+

Rezultātu apvienošana ar GROUP BY

Paziņojums GROUP BY ir neticami noderīga SQL valodas daļa. Tā var sniegt datu kopsavilkuma informāciju, piemēram, satura lapai. Tā ir lieliska alternatīva liela datu apjoma iegūšanai. Datu bāze labi pārvar šo papildu slodzi, jo tās dizains padara to optimālu darbam.

Kad esat sapratis grupēšanu un to, kā pievienoties vairākām tabulām, varēsit izmantot lielāko daļu relāciju datu bāzes.

Kopīgot Kopīgot Čivināt E -pasts Kā vienlaikus vaicāt vairākas datu bāzes tabulas, izmantojot SQL savienojumus

Uzziniet, kā izmantot SQL savienojumus, lai racionalizētu vaicājumus, ietaupītu laiku un liktu justies kā SQL enerģijas lietotājam.

veikali, kas pārtrauc darbību netālu no manis
Lasīt Tālāk Saistītās tēmas
  • Programmēšana
  • SQL
Par autoru Bobijs Džeks(58 raksti publicēti)

Bobijs ir tehnoloģiju entuziasts, kurš gandrīz divus gadu desmitus strādāja par programmatūras izstrādātāju. Viņš aizraujas ar spēlēm, strādā par atsauksmju redaktoru žurnālā Switch Player un ir iedziļinājies visos tiešsaistes publicēšanas un tīmekļa izstrādes aspektos.

Vairāk no Bobija Džeka

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai iegūtu tehniskus padomus, pārskatus, bezmaksas e -grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu