Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Részletező csoportosítások 2012. 04.03. Hári Veronika

Hasonló előadás


Az előadások a következő témára: "Részletező csoportosítások 2012. 04.03. Hári Veronika"— Előadás másolata:

1 Részletező csoportosítások Hári Veronika

2 A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele a minimum elégséges érdemjegynek!

3 Részletező csoportosítások Elemző jellegű feladatokhoz Részeredmények képzése  csoportfüggvények részértékei Rugalmas csoportosítás A GROUP BY hatékonyabb használata!

4 GROUPING SETS fv GROUP BY kiegészítése Segítségével több szempont alapján is csoportosíthatunk

5 Példa 1 Képezzen részösszegeket a fizetés (sal) oszopon az alábbi csoportosításokban:  mgr, deptno, job  deptno, job  mgr Egyetlen lekérdezésben?!

6 Megoldás: GROUPING SETS SELECT mgr, deptno, job, SUM(sal) FROM emp GROUP BY GROUPING SETS((mgr, deptno, job), (deptno, job), (mgr));

7 Példa 2 Listázzunk átlagfizetéseket  főnök és részleg  részleg és munkakör szerint.

8 Megoldás SELECT NVL(mgr, 0), deptno, NVL(job, 'Nincs'), AVG(sal) FROM emp GROUP BY GROUPING SETS ( (mgr, deptno), (deptno, job) )

9 GROUP BY GROUPING SETS hátrányok Túl bonyolult, túl hosszú Ritkán van arra szükségünk, hogy teljesen különböző csoportosításokat végezzünk Általában a csoportosítások között kapcsolat van Erre rövidítést, ez gyakran használt: ROLLUP

10 ROLLUP GROUP BY résznél használjuk Segítségével egy lekérdezésen belül egyszerűen juthatunk olyan adatokhoz, melyhez minimum két külön lekérdezést kellene írnunk

11 ROLLUP - példa Írjuk meg egy szkriptbe a következő lekérdezéseket: SELECT job, deptno, avg(sal) FROM emp GROUP BY job, deptno; SELECT job, deptno, avg(sal) FROM emp GROUP BY ROLLUP (job, deptno); SELECT job, deptno, avg(sal) FROM emp GROUP BY ROLLUP (deptno, job);

12 Példa 3 Listázzuk ki részlegenként, és ezen belül foglalkozásonként az összfizetéseket, továbbá a részlegenkénti összfizetéseket, végül a vállalati összfizetést, és ugyanezen csoportosításban a létszámokat is. Régi megoldás: külön-külön lekérdezésekkel. Megoldható GROUPING SETS-szel is.

13 Régi megoldás SELECT deptno, job, SUM(sal), COUNT(*) FROM emp GROUP BY deptno, job; SELECT deptno, SUM(sal), COUNT(*) FROM emp GROUP BY deptno; SELECT SUM(sal), COUNT(*) FROM emp;

14 Újabb megoldás SELECT deptno, job, SUM(sal), COUNT(*) FROM emp GROUP BY GROUPING SETS((deptno, job), (deptno)); Nem teljesen jó! A teljes összeget nem adja meg.

15 Új megoldás: ROLLUP SELECT deptno, job, SUM(sal), COUNT(*) FROM emp GROUP BY ROLLUP (deptno, job); ROLLUP(job, deptno): A sima kétmezős GROUP BY-on kívül kiszámolja az egyes munkakör-átlagokat, és a teljes átlagot is

16 Példa 4 Listázza ki munkakörönként és azon belül részlegenként az összfizetést, az átlagfizetést, valamint a csoportlétszámot.

17 Megoldás SELECT job AS munkakör, deptno AS részleg, SUM(sal) AS részösszeg, ROUND(AVG(sal),0) AS átlag, COUNT(*) AS létszám FROM emp GROUP BY ROLLUP (job, deptno);

18 DECODE fv használata Mi van, ha szeretnénk kiírni, hogy a munkakörök átlagfizetése, illetve az összes átlagfizetést? NVL fv segítségével megoldható lenne…

19 DECODE fv használata - KÓD select nvl(job,'Átlag') as Munkakör, DECODE(nvl(job,'x'), 'x', null, nvl(to_char(deptno), 'Munkakörösszes')) as részleg, avg(sal) as atlag from emp group by rollup (job, deptno);

20 Köszönöm a figyelmeteket!


Letölteni ppt "Részletező csoportosítások 2012. 04.03. Hári Veronika"

Hasonló előadás


Google Hirdetések