A relációs adatbázisok erejének nagy részét az adatok szűrése és a táblák összekapcsolása adja. Ezért képviseljük elsősorban ezeket a kapcsolatokat. De a modern adatbázis-rendszerek egy másik értékes technikát nyújtanak: a csoportosítást.
A csoportosítás lehetővé teszi az összesítő információk kibontását egy adatbázisból. Ez lehetővé teszi az eredmények egyesítését hasznos statisztikai adatok létrehozásához. A csoportosítás megmenti a kód írásától olyan általános esetekben, mint például az ábrák átlagolása. És ez hatékonyabb rendszereket eredményezhet.
Mit tesz a GROUP BY záradék?
A GROUP BY, amint a neve is mutatja, az eredményeket egy kisebb halmazba csoportosítja. Az eredmények a csoportosított oszlop minden egyes különálló értékéhez egy sorból állnak. Megmutathatjuk használatát, ha megnézünk néhány mintaadatot olyan sorokkal, amelyek közös értékeket mutatnak.
Az alábbiakban egy nagyon egyszerű adatbázis található, két táblával, amelyek a lemezalbumokat képviselik. Ilyen adatbázist a következővel állíthat be:
alapvető séma írása a választott adatbázis-rendszerhez. A albumok táblázatban kilenc sor van egy elsődleges kulccsal id oszlop és oszlopok a név, az előadó, a megjelenés éve és az értékesítés szempontjából:++++++
| id | név | művész_azonosító | kiadás_év | értékesítés |
++++++
| 1 | Apátság út | 1 | 1969 | 14. |
| 2 | A Hold sötét oldala | 2 | 1973 | 24. |
| 3 | Pletykák | 3 | 1977 | 28. |
| 4 | Nevermind | 4 | 1991 | 17. |
| 5. | Állatok | 2 | 1977 | 6. |
| 6. | Viszlát sárga tégla út | 5. | 1973 | 8. |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9. | Denevér a pokolból 7. | 1977 | 28. |
++++++
A művészek táblázat még egyszerűbb. Hét sora van azonosító és név oszlopokkal:
+++
| id | név |
+++
| 1 | A Beatles |
| 2 | Pink Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirvana |
| 5. | Elton John |
| 6. | Adele |
| 7. | Hús kenyér |
+++
A GROUP BY különböző aspektusait csak egy ilyen egyszerű adatkészlettel érheti meg. Természetesen egy valós adathalmaznak még sok-sok sora lenne, de az alapelvek ugyanazok maradnak.
Csoportosítás egyetlen oszlop szerint
Tegyük fel, hogy meg akarjuk tudni, mennyi albumunk van az egyes előadókhoz. Kezdje egy tipikus SELECT lekérdezés az artist_id oszlop letöltéséhez:
SELECT artist_id FROM albumok
Ez a várakozásoknak megfelelően visszaadja mind a kilenc sort:
++
| művész_azonosító |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 2 |
| 5 |
| 6 |
| 6 |
| 7 |
++
Az eredmények előadó szerinti csoportosításához csatolja a kifejezést GROUP BY artist_id:
SELECT artist_id FROM albumok GROUP BY artist_id
A következő eredmények adódnak:
++
| művész_azonosító |
++
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
++
Az eredményhalmazban hét sor található, csökkentve a albumok asztal. Mindegyik egyedi artist_id egyetlen sora van. Végül, hogy megkapja a tényleges számokat, adja hozzá SZÁMOL(*) a kijelölt oszlopokra:
SELECT artist_id, COUNT (*)
Albumokból
GROUP BY artist_id
+++
| művész_azonosító | GRÓF (*) |
+++
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+++
Az eredmények két sor sort csoportosítanak az azonosítókkal rendelkező művészek számára 2 és 6. Mindegyiknek két albuma van az adatbázisunkban.
Összefüggő: Az Essential SQL Commands csalólap kezdőknek
Hogyan lehet elérni a csoportosított adatokat egy összesített függvénnyel
Lehet, hogy használta a SZÁMOL funkciót, különösen a SZÁMOL(*) forma a fentiek szerint. Meghívja az eredmények számát egy készletben. Használhatja a táblák rekordjainak teljes számának megszerzéséhez:
SELECT COUNT (*) Albumok közül
++
| GRÓF (*) |
++
| 9 |
++
A COUNT egy összesített függvény. Ez a kifejezés azokra a függvényekre utal, amelyek több sor értékét egyetlen értékké alakítják. Gyakran a GROUP BY utasítással együtt használják őket.
Ahelyett, hogy csak a sorok számát számlálnánk, összesített függvényt alkalmazhatunk a csoportosított értékekre:
SELECT artist_id, SUM (értékesítés)
Albumokból
GROUP BY artist_id
+++
| művész_azonosító | SUM (értékesítés)
+++
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+++
A fenti 2. és 6. előadó összes eladása több album eladása együttesen:
SELECT artist_id, értékesítés
Albumokból
WHERE artist_id IN (2, 6)
+++
| művész_azonosító | értékesítés |
+++
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+++
Csoportosítás több oszlop szerint
Több oszlop szerint is csoportosíthat. Csak vesszen el több oszlopot vagy kifejezést. Az eredmények ezen oszlopok kombinációja szerint csoportosulnak.
SELECT kiadási év, értékesítés, számolás (*)
Albumokból
GROUP BY kiadás_év, értékesítés
Ez általában több eredményt eredményez, mint egyetlen oszlop szerinti csoportosítás:
++++
| kiadás_év | értékesítés | gróf (*) |
++++
| 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 ugyanaz a kiadási éve és az eladások száma (1977-ben 28).
Hasznos összesített funkciók
A COUNT-en kívül számos funkció jól működik a GROUP-tal. Minden függvény értéket ad vissza az egyes eredménycsoportok rekordjai alapján.
- A COUNT () a megfelelő rekordok teljes számát adja vissza.
- A SUM () az adott oszlop összesített értéké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 megegyezik a SUM () / COUNT () értékével.
Ezeket a függvényeket GROUP záradék nélkül is használhatja:
AVG (értékesítés) FROM albumok kiválasztása
++
| AVG (értékesítés) |
++
| 19.1111 |
++
A GROUP BY használata WHERE záradékkal
Csakúgy, mint egy normál SELECT esetében, a WHERE segítségével továbbra is szűrheti az eredményhalmazt:
SELECT artist_id, COUNT (*)
Albumokból
WHERE release_year> 1990
GROUP BY artist_id
+++
| művész_azonosító | GRÓF (*) |
+++
| 4 | 1 |
| 6 | 2 |
+++
Most csak 1990 után jelentek meg albumok, előadók szerint csoportosítva. Csatlakozást is használhat a WHERE záradékkal, a GROUP BY-től függetlenül:
SELECT r.name, COUNT (*) AS album
Albumokból l, művészek r
WHERE artist_id = r.id
ÉS kiadás_év> 1990
GROUP BY artist_id
+++
| név | albumok
+++
| Nirvana | 1 |
| Adele | 2 |
+++
Vegye figyelembe azonban, hogy ha összevont oszlop alapján próbál szűrni:
SELECT r.name, COUNT (*) AS album
Albumokból l, művészek r
WHERE artist_id = r.id
ÉS albumok> 2
GROUP BY artist_id;
Hibát fog kapni:
1054 HIBA (42S22): Ismeretlen „album” oszlop a „where clause” részben
Az összesített adatokon alapuló oszlopok nem állnak a WHERE záradék rendelkezésére.
A HAVING záradék használata
Szóval, hogyan szűrheti le az eredményhalmazt a csoportosítás után? A HOGY záradék foglalkozik ezzel a szükséglettel:
SELECT r.name, COUNT (*) AS album
Albumokból l, művészek r
WHERE artist_id = r.id
GROUP BY artist_id
Albumok> 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:
+++
| név | albumok
+++
| Pink Floyd | 2 |
| Adele | 2 |
+++
A WHERE feltételt továbbra is használhatja az eredmények szűrésére a csoportosítás előtt. HAVING záradékkal működik együtt a csoportosítás utáni szűréshez:
SELECT r.name, COUNT (*) AS album
Albumokból l, művészek r
WHERE artist_id = r.id
ÉS kiadás_év> 1990
GROUP BY artist_id
Albumok> 1;
Adatbázisunkban csak egy előadó adott ki egynél több albumot 1990 után:
+++
| név | albumok
+++
| Adele | 2 |
+++
Az eredmények és a GROUP BY kombinálása
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 oldalról. Kiváló alternatíva a nagy mennyiségű adat beolvasására. Az adatbázis jól kezeli ezt az extra terhelést, mivel már a kialakítása miatt optimális a munka szempontjából.
Ha megértette a csoportosítást és a több táblához való csatlakozás módját, akkor képes lesz kihasználni a relációs adatbázis erejének legnagyobb részét.
Tanulja meg, hogyan használhatja az SQL csatlakozásokat a lekérdezések egyszerűsítésére, időmegtakarításra és arra, hogy SQL erőfelhasználóként érezze magát.
- Programozás
- SQL

Bobby technológiai rajongó, aki szoftverfejlesztőként dolgozott a két évtized alatt. Szenvedélyesen játszik a játékokkal, a Switch Player Magazine Véleményszerkesztőjeként dolgozik, és elmerül az online kiadványok és webfejlesztés minden aspektusában.
Iratkozzon fel hírlevelünkre
Csatlakozzon hírlevelünkhöz, amely műszaki tippeket, véleményeket, ingyenes e-könyveket és exkluzív ajánlatokat tartalmaz!
Még egy lépés…!
Kérjük, erősítse meg e-mail címét az imént elküldött e-mailben.