ADATBÁZISOK
Download
Sponsored Links
This presentation is the property of its rightful owner.
1 / 25

ADATBÁZISOK users.nik.uni-obuda.hu/szabozs/ PowerPoint PPT Presentation


  • 71 Views
  • Uploaded on
  • Presentation posted in: General

ADATBÁZISOK http://users.nik.uni-obuda.hu/szabozs/. ISM ÉTLÉS. SELECT Záradékok sorrendje. INTO FROM WHERE GROUP BY HAVING UNION/MINUS INTERSECT ORDER BY. GROUP BY. Group by, Having – egy mezőn: ismert… Mezőlistában: csak a csoportosított mező és csoportosító függvények!!!

Download Presentation

ADATBÁZISOK users.nik.uni-obuda.hu/szabozs/

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Adatb zisok users nik uni obuda hu szabozs

ADATBÁZISOK

http://users.nik.uni-obuda.hu/szabozs/

szabo.zsolt@nik.uni-obuda.hu


Adatb zisok users nik uni obuda hu szabozs

ISMÉTLÉS

szabo.zsolt@nik.uni-obuda.hu


Select z rad kok sorrendje

SELECTZáradékok sorrendje

  • INTO

  • FROM

  • WHERE

  • GROUP BY

  • HAVING

  • UNION/MINUS

  • INTERSECT

  • ORDER BY

szabo.zsolt@nik.uni-obuda.hu


Group by

GROUP BY

  • Group by, Having – egy mezőn: ismert…

  • Mezőlistában: csak a csoportosított mező és csoportosító függvények!!!

  • Több mezőn: összetett csoportosítás, TETSZŐLEGES számú mezőn

  • A szabály továbbra is igaz: csak a csoportosított mezők és csoportosító függvények lehetnek a szelekciós listában!!!

szabo.zsolt@nik.uni-obuda.hu


Select job deptno avg sal from emp group by job deptno

SELECT job, deptno, avg(sal) FROM emp GROUP BY job, deptno;

JOB DEPTNO AVG(SAL)

--------- ---------- ----------

CLERK 10 1300

MANAGER 10 2450

PRESIDENT 10 5000

ANALYST 20 3000

CLERK 20 950

MANAGER 20 2975

CLERK 30 950

MANAGER 30 2850

SALESMAN 30 1400

szabo.zsolt@nik.uni-obuda.hu


Select mgr job deptno avg sal from emp group by job deptno mgr

SELECT mgr, job, deptno, avg(sal) FROM emp GROUP BY job, deptno, mgr;

MGRJOB DEPTNO AVG(SAL)

---------- --------- ---------- ----------

7839 MANAGER 30 2850

7839 MANAGER 10 2450

7782 CLERK 10 1300

7698 SALESMAN 30 1400

7839 MANAGER 20 2975

7902 CLERK 20 800

7698 CLERK 30 950

PRESIDENT 10 5000

7566 ANALYST 20 3000

7788 CLERK 20 1100

szabo.zsolt@nik.uni-obuda.hu


Nvl t pus egyez s

NVL – Típus-egyezés

  • SELECT nvl(mgr, 'nincs'), deptno, avg(sal) FROM emp GROUP BY mgr, deptno;

  • SELECT nvl(to_char(mgr), 'Nincs'), deptno, avg(sal) FROM emp GROUP BY mgr, deptno;

  • SELECT nvl(mgr, 0), deptno, avg(sal) FROM emp GROUP BY mgr, deptno;

szabo.zsolt@nik.uni-obuda.hu


Egyszer t bbmez s group by h tr nyai

EGYSZERŰ / TÖBBMEZŐS GROUP BY HÁTRÁNYAI

  • Merev, túlságosan kötött

  • Egy lekérdezésben csak egyféleképpen lehet csoportosítani, ez érvényes a teljes eredmény-halmazra

  • Részeredmények belső optimalizálása??

  • Cél: egy lekérdezéssel többfajta csoportosítást elvégezni  GROUPING SETS

  • SELECT job, deptno, avg(sal) FROM emp GROUP BY GROUPING SETS ( (job, deptno) );

szabo.zsolt@nik.uni-obuda.hu


Group by grouping sets

GROUP BY GROUPING SETS

  • SELECT job, avg(sal) FROM emp GROUP BY GROUPING SETS ( job );

  • SELECT job, deptno, avg(sal) FROM emp GROUP BY GROUPING SETS ( (job, deptno) );

  • SELECT job, deptno, avg(sal) FROM emp GROUP BY GROUPING SETS ( job, deptno );

    = SELECT job, deptno, avg(sal) FROM emp GROUP BY GROUPING SETS ( (job), (deptno) );

  • SELECT job, deptno, mgr, avg(sal) FROM emp GROUP BY GROUPING SETS ( (job, deptno), (mgr) );

szabo.zsolt@nik.uni-obuda.hu


Group by grouping sets1

GROUP BY GROUPING SETS

  • Egy lekérdezésen belül többféle csoportosítást is meg tudunk adni

  • Pl. egy lekérdezésen belül egyszerre akarok MGR, DEPTNO és JOB, DEPTNO csoportosítást csinálni:

SELECT nvl(mgr, 0), deptno, nvl(job, 'Nincs'), avg(sal) FROM empGROUP BY GROUPING SETS ( (mgr, deptno), (deptno, job));

szabo.zsolt@nik.uni-obuda.hu


Group by grouping sets2

GROUP BY GROUPING SETS

  • SELECT nvl(mgr, 0), nvl(deptno,0), nvl(job, 'NO'), avg(sal) FROM emp GROUP BY GROUPING SETS ( (mgr, deptno), (deptno, job), (mgr));

  • SELECT nvl(mgr, 0), nvl(deptno,0), nvl(job, 'NO'), avg(sal) FROM emp GROUP BY GROUPING SETS ( (mgr, deptno), (deptno, job), (mgr), ());

szabo.zsolt@nik.uni-obuda.hu


Adatb zisok users nik uni obuda hu szabozs

szabo.zsolt@nik.uni-obuda.hu


Grouping

GROUPING

 Nem tudjuk, hogy miért 0 az mgr

  • GROUPING "csoportosító" függvénnyel megtudhatjuk, hogy az adott mezővel van –e csoportosítás az aktuális rekordban

  • Csoportosító függvény: a szelekciós listában használata engedélyezett

  • Speciális: paraméterként csak csoportosított mezőt kaphat

  • Egy- és többmezős (grouping set nélküli) GROUP BY esetén mindig 0 az eredménye (0 = csoportosításban részt vevő mező)

szabo.zsolt@nik.uni-obuda.hu


Grouping1

GROUPING

  • Grouping set használata esetén arra használható, hogy melyik eredmény-sorban melyik mezők a csoportosított mezők

  • SELECT mgr, deptno, job, avg(sal), GROUPING(mgr) as GMGR, GROUPING(deptno) as GDEPTNO, GROUPING(job) as GJOB FROM empGROUP BY GROUPING SETS ( (mgr, deptno), (deptno, job), (mgr), ());

szabo.zsolt@nik.uni-obuda.hu


Adatb zisok users nik uni obuda hu szabozs

szabo.zsolt@nik.uni-obuda.hu


Grouping2

GROUPING

  • SELECTCASE WHEN GROUPING(mgr)=0 THEN mgr ELSE 0 END as MGR,CASE WHEN GROUPING(deptno)=0 THEN deptno ELSE 0 END as DEPTNO,CASE WHEN GROUPING(job)=0 THEN job ELSE 'NO' END as JOB,avg(sal) FROM emp GROUP BY GROUPING SETS ( (mgr, deptno), (deptno, job), (mgr), ());

szabo.zsolt@nik.uni-obuda.hu


Adatb zisok users nik uni obuda hu szabozs

szabo.zsolt@nik.uni-obuda.hu


Grouping id

GROUPING_ID

  • Egyedi azonosító minden különböző csoportosítás-fajtához

  • Az azonosítók nem [0..N] intervallumban vannak, hanem egyfajta bit-szerű megközelítéssel sorszámozódnak

  • SELECT mgr, deptno, job, avg(sal), GROUPING_ID(mgr, deptno, job) as GID FROM emp GROUP BY GROUPING SETS ( (mgr, deptno), (deptno, job), (mgr), ());

szabo.zsolt@nik.uni-obuda.hu


Adatb zisok users nik uni obuda hu szabozs

szabo.zsolt@nik.uni-obuda.hu


Group by grouping sets h tr nyok

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, ekkor optimalizálható igazán a grouping set-es lekérdezés

  • Erre találtak ki két rövidítést, ez gyakrabban használt: ROLLUP és CUBE

  • Ezekre is lehet ugyanúgy GROUPING és GROUPING_ID függvényeket használni

szabo.zsolt@nik.uni-obuda.hu


Adatb zisok users nik uni obuda hu szabozs

CUBE

  • GROUP BY CUBE(a, b, c) =GROUP BY GROUPING SETS ( (a, b, c), (a, b), (b, c), (a, c), (a), (b), (c), ( )).

  • CUBE(mező1, mező2)  a két mező egyenrangú, minden permutáció szerepel

  • CUBE(job, deptno): A sima kétmezős GROUP BY-on kívül kiszámolja az egyes munkakör-átlagokat, az egyes részleg-átlagokat, és a teljes átlagot is

szabo.zsolt@nik.uni-obuda.hu


Select job deptno avg sal from emp group by cube job deptno

SELECT job, deptno, avg(sal) FROM emp GROUP BY CUBE(job, deptno);

szabo.zsolt@nik.uni-obuda.hu


Rollup

ROLLUP

  • GROUP BY ROLLUP (a, b, c) =GROUPING SETS ( (a, b, c), (a, b), (a), ( ))

  • ROLLUP(mező1, mező2)  az első mező a "fontosabb", azokat a permutációkat vesszük, amelyben ez szerepel

  • 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

szabo.zsolt@nik.uni-obuda.hu


Select job deptno avg sal from emp group by rollup job deptno

SELECT job, deptno, avg(sal) FROM emp GROUP BY ROLLUP(job, deptno);

JOB DEPTNO AVG(SAL)

--------- ---------- ----------

CLERK 10 1300

MANAGER 10 2450

PRESIDENT 10 5000

ANALYST 20 3000

CLERK 20 950

MANAGER 20 2975

CLERK 30 950

MANAGER 30 2850

SALESMAN 30 1400

ANALYST 3000

CLERK 1037,5

MANAGER 2758,33333

PRESIDENT 5000

SALESMAN 1400

2073,21429

szabo.zsolt@nik.uni-obuda.hu


Csoportos t sok kever se

CSOPORTOSÍTÁSOK KEVERÉSE

  • GROUP BY a, CUBE(b, c) = GROUP BY GROUPING SETS ( (a, b, c), (a, b), (a, c), (a) )

  • GROUP BY a, ROLLUP(b, c) =GROUP BY GROUPING SETS ( (a, b, c), (a, b), (a) )

  • Nem igazából használt, csak akkor, ha az üres csoportosítási halmaz valamiért nem kell

szabo.zsolt@nik.uni-obuda.hu


  • Login