Veľká časť sily relačných databáz pochádza z filtrovania údajov a spájania tabuliek. Preto tieto vzťahy zastupujeme na prvom mieste. Ale moderné databázové systémy poskytujú ďalšiu cennú techniku: zoskupovanie.

Zoskupenie 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. Zoskupenie vám ušetrí od písania kódu pre bežné prípady, ako sú napríklad priemerné zoznamy čísel. Môže to viesť k efektívnejším systémom.

Čo robí doložka GROUP BY?

GROUP BY, ako už názov napovedá, zoskupuje výsledky do menšej množiny. Výsledky pozostávajú z jedného riadku pre každú odlišnú hodnotu zoskupeného stĺpca. Jeho použitie môžeme ukázať pohľadom na niektoré vzorové údaje s riadkami, ktoré zdieľajú niektoré spoločné hodnoty.

Nasleduje veľmi jednoduchá databáza s dvoma tabuľkami, ktoré predstavujú albumy nahrávok. Takúto databázu môžete vytvoriť do písanie základnej schémy pre vami vybraný databázový systém. The albumy tabuľka má deväť riadkov s primárnym kľúčom id stĺpec a stĺpce pre meno, interpreta, rok vydania a tržby:

instagram viewer
++++++
| id | meno | artist_id | release_year | predaj |
++++++
| 1 | Abbey Road | 1 | 1969 | 14 |
| 2 | Temná strana Mesiaca 2 | 1973 | 24 |
| 3 | Povesti | 3 | 1977 | 28 |
| 4 | Nevadí | 4 | 1991 | 17 |
| 5 | Zvieratá | 2 | 1977 | 6 |
| 6 | Zbohom žltá tehlová cesta 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Netopier z pekla 7 | 1977 | 28 |
++++++

The umelcov tabuľka je ešte jednoduchšia. Má sedem riadkov so stĺpcami id a name:

+++
| id | meno |
+++
| 1 | The Beatles |
| 2 | Pink Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirvana |
| 5 | Elton John |
| 6 | Adele |
| 7 | Mäsový bochník |
+++

Rôzne aspekty GROUP BY môžete pochopiť iba pomocou jednoduchého súboru údajov, ako je tento. Sada skutočných údajov by samozrejme mala oveľa viac riadkov, ale princípy zostávajú rovnaké.

Zoskupenie do jedného stĺpca

Povedzme, že chceme zistiť, koľko albumov máme pre každého umelca. Začnite s typickým VYBERTE dopyt na načítanie stĺpca artist_id:

VYBERTE interpreta_id Z albumov

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

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

Ak chcete tieto výsledky zoskupiť podľa umelca, pripojte frázu GROUP BY artist_id:

VYBERTE interpreta_id Z albumov SKUPINU PODĽA interpreta_id

Výsledkom sú nasledujúce výsledky:

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

V sade výsledkov je sedem riadkov, zmenšených z celkových deviatich v albumy stôl. Každý jedinečný artist_id má jediný riadok. Nakoniec získate skutočné počty pridaním COUNT (*) do vybratých stĺpcov:

SELECT id umelca, COUNT (*)
Z albumov
GROUP BY artist_id
+++
| artist_id | POČET (*) |
+++
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+++

Výsledky zoskupujú dva páry riadkov pre umelcov s identifikátormi 2 a 6. Každý z nich má v našej databáze dva albumy.

Súvisiace: Cheat Sheet pre základné príkazy SQL pre začiatočníkov

Ako pristupovať k zoskupeným údajom pomocou agregovanej funkcie

Možno ste použili COUNT funkciu predtým, najmä v COUNT (*) forma, ako je vidieť 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:

VYBERTE POČET (*) Z albumov
++
| POČET (*) |
++
| 9 |
++

COUNT je agregačná funkcia. Tento výraz označuje funkcie, ktoré prekladajú hodnoty z viacerých riadkov do jednej hodnoty. Často sa používajú v spojení s príkazom GROUP BY.

Namiesto spočítania počtu riadkov môžeme na zoskupené hodnoty použiť agregačnú funkciu:

SELECT artist_id, SUM (tržby)
Z albumov
GROUP BY artist_id
+++
| artist_id | SUM (tržby)
+++
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+++

Celkový predaj uvedený vyššie pre interpretov 2 a 6 je kombinovaný predaj ich viacerých albumov:

VYBERTE identifikátor interpreta, tržby
Z albumov
WHERE artist_id IN (2, 6)
+++
| artist_id | predaj |
+++
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+++

Zoskupenie podľa viacerých stĺpcov

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

VYBERTE release_year, sales, count (*)
Z albumov
GROUP BY release_year, sales

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

++++
| release_year | predaj | počet (*) |
++++
| 1969 | 14 | 1 |
| 1973 | 24 | 1 |
| 1977 | 28 | 2 |
| 1991 | 17 | 1 |
| 1977 | 6 | 1 |
| 1973 | 8 | 1 |
| 2011 | 25 | 1 |
| 2015 | 22 | 1 |
++++

Upozorňujeme, ž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é agregačné funkcie

Okrem funkcie COUNT dobre funguje niekoľko funkcií so skupinou GROUP. 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 ().

Môžete tiež použiť tieto funkcie bez klauzuly GROUP:

VYBERTE AVG (predaj) Z albumov
++
| AVG (predaj) |
++
| 19.1111 |
++

Použitie SKUPINY BY s klauzulou WHERE

Rovnako ako pri bežnom výbere SELECT môžete aj naďalej filtrovať výslednú množinu pomocou WHERE:

SELECT id umelca, COUNT (*)
Z albumov
KDE release_year> 1990
GROUP BY artist_id
+++
| artist_id | POČET (*) |
+++
| 4 | 1 |
| 6 | 2 |
+++

Teraz máte iba tie albumy vydané po roku 1990, ktoré sú zoskupené podľa umelcov. Môžete tiež použiť spojenie s klauzulou WHERE, nezávisle od skupiny GROUP BY:

VYBERTE r. Meno, POČET (*) AKO albumov
Z albumov l, umelci r
WHERE artist_id = r.id
AND release_year> 1990
GROUP BY artist_id
+++
| meno | albumy |
+++
| Nirvana | 1 |
| Adele | 2 |
+++

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

VYBERTE r. Meno, POČET (*) AKO albumov
Z albumov l, umelci r
WHERE artist_id = r.id
A albumy> 2
SKUPINA PODĽA artist_id;

Zobrazí sa chyba:

CHYBA 1054 (42S22): Neznámy stĺpec „albumy“ v položke „where clause“

Klauzula WHERE nemá k dispozícii stĺpce založené na agregovaných údajoch.

Použitie klauzuly HAVING

Ako teda filtrovať výslednú sadu po zoskupení? The MAJÚCI doložka sa zaoberá touto potrebou:

VYBERTE r. Meno, POČET (*) AKO albumov
Z albumov l, umelci r
WHERE artist_id = r.id
GROUP BY artist_id
MÁ albumy> 1;

Všimnite si, že klauzula HAVING nasleduje po GROUP BY. Inak je to v podstate jednoduchá výmena KDE KDE MÁME. Výsledky sú:

+++
| meno | albumy |
+++
| Pink Floyd | 2 |
| Adele | 2 |
+++

Stále môžete použiť podmienku WHERE na filtrovanie výsledkov pred zoskupením. Po zoskupení bude pracovať spolu s klauzulou HAVING na filtrovanie:

VYBERTE r. Meno, POČET (*) AKO albumov
Z albumov l, umelci r
WHERE artist_id = r.id
AND release_year> 1990
GROUP BY artist_id
MÁ albumy> 1;

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

+++
| meno | albumy |
+++
| 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 poskytnúť súhrnné informácie o údajoch, napríklad pre stránku s obsahom. Je to vynikajúca alternatíva k načítaniu veľkého množstva údajov. Databáza zvláda toto extra pracovné zaťaženie dobre, pretože jej samotný dizajn ju robí optimálnou pre danú prácu.

Keď pochopíte zoskupovanie a spôsob spojenia viacerých tabuliek, budete môcť využiť väčšinu sily relačnej databázy.

Email
Ako dopytovať viac databázových tabuliek naraz pomocou spojení SQL

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

Súvisiace témy
  • Programovanie
  • SQL
O autorovi
Bobby Jack (28 publikovaných článkov)

Bobby je technologický nadšenec, ktorý takmer dve desaťročia pracoval ako vývojár softvéru. Je vášnivým hrám, pracuje ako redaktor recenzií v magazíne Switch Player Magazine a je ponorený do všetkých aspektov online publikovania a vývoja webu.

Viac od Bobbyho Jacka

Prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu s technickými tipmi, recenziami, bezplatnými elektronickými knihami a exkluzívnymi ponukami!

Ešte jeden krok…!

V e-maile, ktorý sme vám práve poslali, potvrďte svoju e-mailovú adresu.

.