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

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


  • 66 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/

[email protected]


Adatb zisok users nik uni obuda hu szabozs

ISMÉTLÉS

[email protected]


Select z rad kok sorrendje

SELECTZáradékok sorrendje

  • INTO

  • FROM

  • WHERE

  • GROUP BY

  • HAVING

  • UNION/MINUS

  • INTERSECT

  • ORDER BY

[email protected]


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!!!

[email protected]


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

[email protected]


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

[email protected]


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;

[email protected]


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) );

[email protected]


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) );

[email protected]


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));

[email protected]


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), ());

[email protected]


Adatb zisok users nik uni obuda hu szabozs

[email protected]


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ő)

[email protected]


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), ());

[email protected]


Adatb zisok users nik uni obuda hu szabozs

[email protected]


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), ());

[email protected]


Adatb zisok users nik uni obuda hu szabozs

[email protected]


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), ());

[email protected]


Adatb zisok users nik uni obuda hu szabozs

[email protected]


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

[email protected]


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

[email protected]


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

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

[email protected]


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

[email protected]


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

[email protected]


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

[email protected]


  • Login