Minden, amit az SQL GROUP BY nyilatkozatról tudni kell

Minden, amit az SQL GROUP BY nyilatkozatról tudni kell

A relációs adatbázisok erejének nagy része az adatok szűréséből és a táblázatok összekapcsolásából származik. Ezért képviseljük először ezeket a kapcsolatokat. De a modern adatbázis -rendszerek egy másik értékes technikát is kínálnak: a csoportosítást.





A csoportosítás lehetővé teszi az összefoglaló információk kinyerését az adatbázisból. Lehetővé teszi az eredmények kombinálását hasznos statisztikai adatok létrehozásához. A csoportosítás megkíméli Önt a kódok írásától a gyakori esetekhez, például a számjegyek átlagolásához. És ez hatékonyabb rendszereket eredményezhet.





Mit tesz a GROUP BY záradék?

A GROUP BY, ahogy a neve is sugallja, az eredményeket kisebb halmazba csoportosítja. Az eredmények egy sorból állnak a csoportosított oszlop minden egyes értékéhez. Használatát úgy mutathatjuk ki, ha néhány mintaadatot tekintünk meg olyan sorokkal, amelyek közös értékekkel rendelkeznek.





hogyan lehet podcastokat hallgatni PC -n

Az alábbiakban egy nagyon egyszerű adatbázis található, két táblával, amely a lemezalbumokat ábrázolja. Egy ilyen adatbázist úgy hozhat létre egy alapvető séma írása a választott adatbázis -rendszerhez. Az albumok táblázat kilenc sort tartalmaz elsődleges kulccsal id oszlop és oszlopok név, előadó, megjelenés éve és értékesítései:

+----+---------------------------+-----------+--------------+-------+
| 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 |
+----+---------------------------+-----------+--------------+-------+

Az művészek táblázat még egyszerűbb. Hét sora van azonosító és név oszlopokkal:



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

Egy egyszerű adathalmazzal megértheti a GROUP BY különböző aspektusait. Természetesen egy valós adathalmaznak sok-sok sora lenne, de az elvek változatlanok.

Csoportosítás egyetlen oszlop szerint

Tegyük fel, hogy szeretnénk megtudni, hogy hány albumunk van az egyes előadókhoz. Kezdje egy tipikus SELECT lekérdezés az előadó_azonosító lekéréséhez:





SELECT artist_id FROM albums

Ez a várt módon mind a kilenc sort visszaadja:

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

Ha ezeket az eredményeket a művész szerint kívánja csoportosítani, csatolja a kifejezést GROUP BY artist_id :





SELECT artist_id FROM albums GROUP BY artist_id

Ami a következő eredményeket adja:

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

Az eredményhalmazban hét sor található, csökkentve a teljes kilencből albumok asztal. Mindegyik egyedi artist_id egyetlen sora van. Végül, hogy megkapja a tényleges számokat, adja hozzá SZÁMOL(*) a kiválasztott oszlopokhoz:

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 |
+-----------+----------+

Az eredmények két sorpárt csoportosítanak az azonosítójú művészek számára 2 és 6 . Mindegyiknek két albuma van az adatbázisunkban.

Összefüggő: Az alapvető SQL parancsok csalólapja kezdőknek

Hogyan lehet hozzáférni a csoportosított adatokhoz összesített funkcióval

Lehet, hogy a SZÁMOL funkció előtt, különösen a SZÁMOL(*) a fent látható formában. Lekéri a halmaz eredményeinek számát. Segítségével lekérheti a táblázat összes rekordját:

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

A COUNT egy összesített függvény. Ez a kifejezés olyan funkciókra utal, amelyek több sorból származó értékeket egyetlen értékké alakítanak le. Gyakran használják a GROUP BY utasítással együtt.

A sorok számának számítása helyett összesített függvényt alkalmazhatunk a csoportosított értékekre:

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 |
+-----------+------------+

A 2. és 6. előadónál a fent bemutatott teljes eladások a több albumuk eladásait jelentik:

SELECT artist_id, sales
FROM albums
WHERE artist_id IN (2, 6)
+-----------+-------+
| artist_id | sales |
+-----------+-------+
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+-----------+-------+

Csoportosítás több oszlop szerint

Több oszlop szerint csoportosíthat. Csak vegyen fel több oszlopot vagy kifejezést, vesszővel elválasztva. Az eredmények ezen oszlopok kombinációja szerint csoportosulnak.

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

Ez általában több eredményt hoz, mint egyetlen oszlop szerinti csoportosítás:

+--------------+-------+----------+
| 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 |
+--------------+-------+----------+

Vegye figyelembe, hogy kis példánkban csak két albumnak van ugyanaz a megjelenési éve és eladási száma (1977 -ben 28).

Hasznos összesítő funkciók

A COUNT -on kívül számos funkció jól működik a GROUP -al. Minden függvény értéket ad vissza az egyes eredménycsoportokhoz tartozó rekordok alapján.

  • A COUNT () a megfelelő rekordok teljes számát adja vissza.
  • A SUM () az adott oszlop összes értékének összegét adja vissza.
  • A MIN () az adott oszlop legkisebb értékét adja vissza.
  • A MAX () az adott oszlop legnagyobb értékét adja vissza.
  • Az AVG () az átlagos átlagot adja vissza. Ez a SUM () / COUNT () megfelelője.

Ezeket a funkciókat GROUP záradék nélkül is használhatja:

mi az a tbh az instagramon
SELECT AVG(sales) FROM albums
+------------+
| AVG(sales) |
+------------+
| 19.1111 |
+------------+

A GROUP BY használata WHERE záradékkal

A normál SELECT -hez hasonlóan továbbra is használhatja a WHERE -t az eredményhalmaz szűrésére:

SELECT artist_id, COUNT(*)
FROM albums
WHERE release_year > 1990
GROUP BY artist_id
+-----------+----------+
| artist_id | COUNT(*) |
+-----------+----------+
| 4 | 1 |
| 6 | 2 |
+-----------+----------+

Most már csak az 1990 után megjelent albumok vannak előadó szerint csoportosítva. A WHERE záradékkal való csatlakozást is használhatja, függetlenül a GROUP BY -tól:

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 |
+---------+--------+

Ne feledje azonban, hogy ha egy összesített oszlop alapján próbál szűrni:

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

Hibát kap:

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

Az összesített adatokon alapuló oszlopok nem érhetők el a WHERE záradékhoz.

A HAVING záradék használata

Tehát hogyan szűrheti az eredményhalmazt a csoportosítás után? Az VAN záradék foglalkozik ezzel az igénnyel:

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

Vegye figyelembe, hogy a HAVING záradék a GROUP BY után következik. Egyébként lényegében a WHERE egyszerű cseréje a HAVING -el. Az eredmények a következők:

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

Még mindig használhatja a WHERE feltételt az eredmények szűrésére a csoportosítás előtt. A HAVING záradékkal együtt fog működni a csoportosítás utáni szűréshez:

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;

Adatbázisunkban csak egy előadó adott ki több albumot 1990 után:

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

Az eredmények kombinálása a GROUP BY

A GROUP BY utasítás hihetetlenül hasznos része az SQL nyelvnek. Összefoglaló információkat nyújthat az adatokról, például egy tartalmi oldalhoz. Kiváló alternatíva a nagy mennyiségű adat lekérésére. Az adatbázis jól kezeli ezt a többletterhelést, mivel maga a kialakítás teszi optimálissá a munkához.

Ha megértette a csoportosítást és a több táblához való csatlakozást, akkor ki tudja használni a relációs adatbázis erejének nagy részét.

Részvény Részvény Csipog Email Hogyan lehet egyszerre több adatbázistáblát lekérdezni az SQL egyesítésekkel?

Ismerje meg, hogyan használhatja az SQL -összekapcsolásokat a lekérdezések egyszerűsítésére, az időmegtakarításra, és úgy érezheti magát, mint egy SQL -felhasználó.

usb-a vs usb-c
Olvassa tovább Kapcsolódó témák
  • Programozás
  • SQL
A szerzőről Bobby Jack(58 cikk megjelent)

Bobby technológiai rajongó, aki két évtized nagy részében szoftverfejlesztőként dolgozott. Szenvedélyesen szereti a játékot, a Switch Player Magazin Vélemények szerkesztőjeként dolgozik, és elmerül az online közzététel és webfejlesztés minden területén.

Továbbiak Bobby Jack -től

Iratkozzon fel hírlevelünkre

Csatlakozz hírlevelünkhöz, ahol technikai tippeket, értékeléseket, ingyenes e -könyveket és exkluzív ajánlatokat találsz!

Feliratkozáshoz kattintson ide