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-cOlvassa tovább Kapcsolódó témák
- Programozás
- SQL
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őlIratkozzon 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