ADATBÁZISOK
Download
1 / 25

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


  • 91 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' ADATBÁZISOK users.nik.uni-obuda.hu/szabozs/' - todd


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

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

[email protected]


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 deptno, mgr;í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 deptno, mgr;

  • 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 deptno, mgr;

  • 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 deptno, mgr;

  • 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 deptno, mgr;

  • 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]



Grouping
GROUPING deptno, mgr;

 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 deptno, mgr;

  • 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]



Grouping2
GROUPING deptno, mgr;

  • 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]



Grouping id
GROUPING_ID deptno, mgr;

  • 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]



Group by grouping sets h tr nyok
GROUP BY GROUPING SETS deptno, mgr;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, 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]


CUBE deptno, mgr;

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

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

  • 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]


ad