Facebook iconTwitter icon

Nachádzate sa tu

Domov

03. SQL GROUP BY

V tomto tutoriáli sa zameriame na SQL príkaz GROUP BY, ktorý je veľmi dôležité správne pochopiť nakoľko je nevyhnutný pre kalkulácie v SQL.

Pred tým než si povieme o GROUP BY je dôležité si uvedomiť že tabuľka sa skladá zo stĺpcov a riadkov, pričom groupovanie prebieha na úrovni riadkov.

Uvažujme o tabuľke, ktorá obsahuje nasledovné polia (stĺpce): Meno predajcu, Pobočka v ktorej pracuje, Mestokde je pobočka situovaná, Región pobočky, a Tržby, ktoré predajca vyprodukoval. Úlohou v tomto prípade je postupne zrátať, aké veľké tržby boli vyprodukované na úrovni Predajcov, Pobočiek, Miest, Regiónov a koľko tržieb vyprodukovala celá Firma. 

Predajca:

SELECTmeno,priezvisko, pobocka, mesto, region, SUM(Trzby) as sucet_trzieb , AVG(Trzby) as priemer_trzieb

FROM tabulka_trzby

GROUP BY meno, priezvisko, pobocka, mesto, region
 

Týmto selektom vyrátame sumu tržieb na úrovni predajcu. Tržby narátavame prostredníctvom funkcie SUM a úroveň na ktorej tieto tržby zoskupujeme definuje GROUP BY.

V nasledujúcom selekte vyrátame tržby na úrovni pobočiek.

Pobočka:

SELECT pobocka, mesto, region,  SUM(Trzby) as sucet_trzieb , AVG(Trzby) as priemer_trzieb

FROM tabulka_trzby

GROUP BY pobocka, mesto, region

V tomto prípade sme museli zo selektu vylúčiť meno a priezvysko, aby sme vedeli zrátať tržby na úrovni pobočiek. GROUP BY v podstate nie je nič iné len pohybovanie sa na rôznych úrovniach tabuľky, podľa toho o aký detail výpočtu máme záujem.

Vždykeď mame v selekte agregačnú funkciu ako napr.SUM (suma), AVG (priemer) atd., musíme zadať GROUP BY, čím špecifikujeme na akú úroveň detailu chceme túto sumu alebo priemer vypočítať.

Treba si všakuvedomiť jednu vec. Pokiaľ chceme zrátať tržby na úrovni pobočky a v  máme v selekte predajcu,čo je väčší detail ako pobočka, nebude to možné, nakoľko je to z pohľadu programu logický nezmysel. Predajcu budeme musieť zo selektu odstrániť, lebo by jednoducho povedané rozbíjal úroveň pobočky.

Ďalej zrátame úroveň mesta, regiónu a zrátame priemer na úrovni celej firmy.

Mesto:

SELECT mesto, region,  SUM(Trzby) as sucet_trzieb ,  AVG(Trzby) as priemer_trzieb

FROM tabulka_trzby

GROUP BY mesto, region
Regón:

SELECT region,  SUM(Trzby) as sucet_trzieb ,  AVG(Trzby) as priemer_trzieb

FROM tabulka_trzby

GROUP BY  region

Celá Spoločnosť:

SELECT  SUM(Trzby) as sucet_trzieb ,  AVG(Trzby) as priemer_trzieb

FROM tabulka_trzby

V prípade celej spoločnosti GROUP BY nie je potrebný, nakoľko o žiadnu úroveň detailu nemáme záujem.

Všetky príspevky v tejto kategórii:

Reklamné odkazy

kosime.sk
Kosenie trávy, čistenie pozemkov a záhradnícke práce