1 / 20

Részletező csoportosítások

Részletező csoportosítások. 2012. 04.03. Hári Veronika harivero @ gmail.hu. 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!. Részletező csoportosítások.

Download Presentation

Részletező csoportosítások

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Részletező csoportosítások 2012. 04.03. Hári Veronikaharivero@gmail.hu

  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 SETShá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 empGROUP BY job, deptno; • SELECT job, deptno, avg(sal)FROM empGROUP BY ROLLUP (job, deptno); • SELECT job, deptno, avg(sal)FROM empGROUP 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 fvhaszná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 selectnvl(job,'Átlag') as Munkakör, DECODE(nvl(job,'x'), 'x', null, nvl(to_char(deptno), 'Munkakörösszes')) as részleg, avg(sal) asatlag fromemp groupbyrollup (job, deptno);

  20. Köszönöm a figyelmeteket!

More Related