Všetko, čo potrebujete vedieť o vyhlásení SQL GROUP BY

Všetko, čo potrebujete vedieť o vyhlásení SQL GROUP BY

Väčšina sily relačných databáz pochádza z filtrovania údajov a spájania tabuliek dohromady. Preto tieto vzťahy v prvom rade reprezentujeme. Moderné databázové systémy však poskytujú ďalšiu hodnotnú techniku: zoskupovanie.





Zoskupenie vám umožňuje extrahovať súhrnné informácie z databázy. Umožňuje vám kombinovať výsledky a vytvárať užitočné štatistické údaje. Zoskupovanie vám ušetrí od písania kódu pre bežné prípady, ako je spriemerovanie zoznamov obrázkov. A môže prispieť k efektívnejším systémom.





Čo robí doložka GROUP BY?

GROUP BY, ako naznačuje názov, zoskupuje výsledky do menšej sady. Výsledky pozostávajú z jedného riadka pre každú odlišnú hodnotu zoskupeného stĺpca. Jeho využitie môžeme ukázať na príklade údajov s riadkami, ktoré zdieľajú niektoré spoločné hodnoty.





obrazovka je hore nohami Windows 10

Nasleduje veľmi jednoduchá databáza s dvoma tabuľkami, ktoré predstavujú albumy záznamov. Takúto databázu môžete nastaviť do písanie základnej schémy pre vami zvolený databázový systém. The albumov tabuľka má deväť riadkov s primárnym kľúčom id stĺpček a stĺpce s názvom, umelcom, rokom vydania a predajmi:

+----+---------------------------+-----------+--------------+-------+
| 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 umelcov tabuľka je ešte jednoduchšia. Má sedem riadkov so stĺpcami s ID a názvami:



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

Rozumiete rôznym aspektom GROUP BY pomocou jednoduchého súboru údajov, ako je tento. Skutočný súbor údajov by samozrejme mal veľa, mnoho ďalších riadkov, ale princípy zostávajú rovnaké.

Zoskupenie podľa jedného stĺpca

Povedzme, že chceme zistiť, koľko albumov máme pre jednotlivých interpretov. Začnite typickým VYBERTE dotaz na načítanie stĺpca artist_id:





SELECT artist_id FROM albums

Týmto sa vráti všetkých deväť riadkov podľa očakávania:

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

Ak chcete zoskupiť tieto výsledky podľa interpreta, pripojte frázu SKUPINA PODĽA artist_id :





SELECT artist_id FROM albums GROUP BY artist_id

Čo dáva nasledujúce výsledky:

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

V súbore výsledkov je sedem riadkov, znížených z celkových deviatich v albumov stôl. Každý jedinečný artist_id má jeden riadok. Nakoniec, aby ste získali skutočný počet, pridajte COUNT (*) do vybraných stĺpcov:

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

Výsledky zoskupia dva páry riadkov pre umelcov s ID 2 a 6 . Každý má v našej databáze dva albumy.

Súvisiace: The Essential SQL Commands Cheat Sheet for Beginners

Ako pristupovať k zoskupeným údajom pomocou funkcie agregátu

Možno ste použili COUNT fungovať predtým, najmä v COUNT (*) forma, ako je uvedené vyššie. Načíta počet výsledkov v sade. Môžete ho použiť na získanie celkového počtu záznamov v tabuľke:

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

COUNT je agregovaná funkcia. Tento termín sa týka funkcií, ktoré prekladajú hodnoty z viacerých riadkov do jednej hodnoty. Často sa používajú v spojení s príkazom GROUP BY.

Namiesto počítania riadkov môžeme na zoskupené hodnoty použiť súhrnnú funkciu:

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

Celkové tržby uvedené vyššie pre interpretov 2 a 6 predstavujú predaj ich viacerých albumov dohromady:

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

Zoskupenie podľa viacerých stĺpcov

Môžete zoskupiť podľa viac ako jedného stĺpca. Stačí zahrnúť viac stĺpcov alebo výrazov oddelených čiarkami. Výsledky sa zoskupia podľa kombinácie týchto stĺpcov.

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

Spravidla to prinesie viac výsledkov ako zoskupenie do jedného stĺpca:

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

Všimnite si toho, že v našom malom príklade majú iba dva albumy rovnaký rok vydania a počet predajov (28 v roku 1977).

Užitočné funkcie agregátu

Okrem COUNT funguje so skupinou GROUP niekoľko funkcií. Každá funkcia vracia hodnotu na základe záznamov patriacich do každej skupiny výsledkov.

  • COUNT () vráti celkový počet zodpovedajúcich záznamov.
  • SUM () vráti súčet všetkých hodnôt v danom stĺpci.
  • MIN () vráti najmenšiu hodnotu v danom stĺpci.
  • MAX () vráti najväčšiu hodnotu v danom stĺpci.
  • AVG () vráti priemerný priemer. Je to ekvivalent SUM () / COUNT ().

Tieto funkcie môžete používať aj bez doložky GROUP:

ako niekomu poslať správu na youtube 2019
SELECT AVG(sales) FROM albums
+------------+
| AVG(sales) |
+------------+
| 19.1111 |
+------------+

Použitie GROUP BY s klauzulou WHERE

Rovnako ako pri normálnom SELECT, stále môžete použiť WHERE na filtrovanie sady výsledkov:

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

Teraz máte zoskupené podľa albumov iba tie albumy vydané po roku 1990. Môžete tiež použiť spojenie s klauzulou WHERE, nezávisle od skupiny 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 |
+---------+--------+

Upozorňujeme však, že ak sa pokúsite filtrovať na základe agregovaného stĺpca:

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

Zobrazí sa chyba:

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

Stĺpce na základe agregovaných údajov nie sú k dispozícii doložke WHERE.

Použitie klauzuly HAVING

Ako teda filtrujete sadu výsledkov po tom, ako došlo k zoskupeniu? The MAJÚCI doložka pojednáva o tejto potrebe:

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

Všimnite si toho, že klauzula HAVING nasleduje za GROUP BY. V opačnom prípade je to v podstate jednoduchá výmena KDE za VLASTNOSŤ. Výsledky sú tieto:

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

Na filtrovanie výsledkov pred zoskupením môžete stále použiť podmienku WHERE. Bude fungovať spoločne s klauzulou HAVING na filtrovanie po zoskupení:

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;

Iba jeden umelec v našej databáze vydal po roku 1990 viac ako jeden album:

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

Kombinácia výsledkov so skupinou GROUP BY

Príkaz GROUP BY je neuveriteľne užitočnou súčasťou jazyka SQL. Môže poskytovať súhrnné informácie o údajoch, napríklad o stránke s obsahom. Je to vynikajúca alternatíva k načítaniu veľkého množstva údajov. Databáza zvláda toto ďalšie pracovné zaťaženie dobre, pretože jeho samotný dizajn ho robí optimálnym pre danú úlohu.

Hneď ako porozumiete zoskupovaniu a spojeniu viacerých tabuliek, budete môcť využiť väčšinu sily relačnej databázy.

zdieľam zdieľam Tweet E -mail Ako dotazovať viacero databázových tabuliek naraz pomocou spojení SQL

Naučte sa používať spojenia SQL na zefektívnenie dotazov, úsporu času a pocit, že sa cítite ako skúsený používateľ SQL.

najlepšia komerčná tlačiareň pre malé firmy
Čítajte ďalej Súvisiace témy
  • Programovanie
  • SQL
O autorovi Bobby Jack(58 publikovaných článkov)

Bobby je technologický nadšenec, ktorý pracoval ako vývojár softvéru väčšinu dvoch desaťročí. Má nadšenie pre hry, pracuje ako editor recenzií v časopise Switch Player a je ponorený do všetkých aspektov online publikovania a webového vývoja.

Viac od Bobbyho Jacka

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné elektronické knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber