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

2014. 07. 20. ADATBÁZISOK

Hasonló előadás


Az előadások a következő témára: "2014. 07. 20. ADATBÁZISOK"— Előadás másolata:

1 2014. 07. 20. ADATBÁZISOK http://users.nik.uni-obuda.hu/szabozs/ 1szabo.zsolt@nik.uni-obuda.hu

2 ISMÉTLÉS 2014. 07. 20.2szabo.zsolt@nik.uni-obuda.hu

3 1.INTO 2.FROM 3.WHERE 4.GROUP BY 5.HAVING 6.UNION/MINUS 7.INTERSECT 8.ORDER BY SELECT Záradékok sorrendje 2014. 07. 20.3szabo.zsolt@nik.uni- obuda.hu

4 ANALITIKUS és RANGFÜGGVÉNYEK 2014. 07. 20.4szabo.zsolt@nik.uni-obuda.hu

5 Alapvető problémák Függvény csak a szelekciós listában lehet Sorba rendezés vagy csoportosítás utáni műveleteket csak allekérdezéssel lehet elvégezni A ROWNUM pszeudo-oszlop használata nehézkes és nem szabványosítható Megoldás: speciális függvények, amely a csoportosítással / rendezéssel együtt tudnak működni 2014. 07. 20.5szabo.zsolt@nik.uni- obuda.hu

6 Analitikus függvények? analitikus_függvény OVER (analitikus_záradék) Analitikus záradék: csoportosítás (PARTITION BY), sorrendberakás (ORDER BY), ablak-kezelés (ROW/RANGE) Szabványos: SQL:2003 (OVER helyett WITHIN GROUP van egy esetben) 2014. 07. 20.6szabo.zsolt@nik.uni- obuda.hu

7 Rangfüggvények Egyszerű rangfügvények: ROW_NUMBER()  Egyszerű sorszám RANK()  Azonos után kimarad DENSE_RANK()  Azonos után folytatja PERCENT_RANK()  Százalékos, [0..1] Alapvető használat: NINCS PARAMÉTERÜK! SELECT ename, sal, RANK() over (ORDER BY sal desc) as RANG FROM emp; 2014. 07. 20.7szabo.zsolt@nik.uni- obuda.hu

8 Partition by Csoportokra bontott rang SELECT deptno, ename, sal, RANK() OVER ( PARTITION BY deptno ORDER BY sal ) as RANG FROM emp; 2014. 07. 20.8szabo.zsolt@nik.uni- obuda.hu

9 Partition by Több mező alapján csoportokra bontott rang SELECT deptno, job, ename, sal, RANK() OVER ( PARTITION BY deptno, job ORDER BY sal ) as RANG FROM emp ORDER BY deptno, job; 2014. 07. 20.9szabo.zsolt@nik.uni- obuda.hu

10 „Aggregáló” rangfüggvények? Ugyanazok a függvények, de a paraméter- lista nem üres – cél egy konkrét (a táblától független) érték sorrendjének keresése OVER helyett WITHIN GROUP NEM LEHET „PARTITION BY” 2014. 07. 20.10szabo.zsolt@nik.uni- obuda.hu

11 Aggregáló használat SELECT RANK(2500) WITHIN GROUP (ORDER BY sal asc) AS rang FROM emp; SELECT RANK(:fiz) WITHIN GROUP (ORDER BY sal desc) AS rang FROM emp; 2014. 07. 20.11szabo.zsolt@nik.uni- obuda.hu

12 Aggregáló-csoportosító használat Minden részlegben szeretnénk látni a megadott érték helyét SELECT deptno, RANK(2500) WITHIN GROUP (ORDER BY sal desc) AS rang FROM emp GROUP BY deptno; GROUP BY  csoportosító függvény is használható lenne, bár logikailag sok értelme itt nincsen 2014. 07. 20.12szabo.zsolt@nik.uni- obuda.hu

13 CSOPORTOSÍTÓ FÜGGVÉNY ANALITIKUS ZÁRADÉKKAL 2014. 07. 20.13szabo.zsolt@nik.uni-obuda.hu

14 Csoportosító függvény analitikus zázadékkal SELECT ename, sal, SUM(SAL) OVER (order by sal) as OSSZ FROM emp;  A lista rendezett – látszik ahogy az összeg növekszik! (azonos fizetéseknél egyszerre!) SELECT ename, sal, AVG(SAL) OVER (order by sal) as AVG FROM emp;  egyre "pontosabb" átlag 2014. 07. 20.14szabo.zsolt@nik.uni- obuda.hu

15 Csoportosító függvény analitikus zázadékkal SELECT deptno, ename, sal, SUM(SAL) OVER ( partition by deptno order by ename ) as OSSZ, COUNT(*) OVER ( partition by deptno order by ename ) as DB FROM emp ORDER BY deptno, ename; 2014. 07. 20.15szabo.zsolt@nik.uni- obuda.hu

16 Csoportosító függvény analitikus zázadékkal select ename, hiredate, sal from emp order by hiredate; select ename, hiredate, sal, sum(sal) over (order by hiredate) as OSSZ from emp order by hiredate; select ename, hiredate, sal, sum(sal) over (partition by to_char(hiredate, 'YYYY') order by hiredate) as OSSZ from emp order by hiredate; 2014. 07. 20.16szabo.zsolt@nik.uni- obuda.hu

17 CSOPORTOSÍTÓ FÜGGVÉNY ANALITIKUS ZÁRADÉKKAL ÉS ABLAK-KEZELÉSSEL 2014. 07. 20.17szabo.zsolt@nik.uni-obuda.hu

18 Csúszó ablak Az ablak az aktuális sor előtt 1 sorral kezdődik és utána 2 sorral ér véget SELECT ename, sal, avg(SAL) OVER ( order by sal rows between 1 preceding and 2 following ) as AVG FROM emp; 2014. 07. 20.18szabo.zsolt@nik.uni- obuda.hu

19 Csúszó ablak Az ablak részleghatárokat is figyelembe vesz, az aktuális sor előtt 1 sorral kezdődik és utána 1 sorral ér véget SELECT deptno, ename, sal, sum(SAL) OVER ( partition by deptno order by sal rows between 1 preceding and 1 following ) as OSSZ FROM emp; 2014. 07. 20.19szabo.zsolt@nik.uni- obuda.hu

20 Csúszó ablak Az ablak részleghatárokat is figyelembe vesz, az aktuális sor előtt végtelen sorral kezdődik és utána 1 sorral ér véget SELECT deptno, ename, sal, sum(SAL) OVER ( partition by deptno order by sal rows between unbounded preceding and 1 following ) as OSSZ FROM emp; 2014. 07. 20.20szabo.zsolt@nik.uni- obuda.hu

21 Részhalmaz Lehetőségünk van RANGE alkalmazására – ritkább. Sorok száma helyett érték- részhalmazt definiálunk Az aktuális sorhoz képest a nagyobb fizetéssel rendelkezőket akarom megszámolni  ez átírható lenne ROWS-ra SELECT deptno, ename, sal, count(*) OVER ( order by sal range between current row and unbounded following ) as DB FROM emp; 2014. 07. 20.21szabo.zsolt@nik.uni- obuda.hu

22 Részhalmaz Az aktuális sorhoz képest +/- 500 USD SELECT deptno, ename, sal, count(*) OVER ( order by sal range between 500 preceding and 500 following ) as DB FROM emp;  ez már nem oldható meg ROWS segítségével 2014. 07. 20.22szabo.zsolt@nik.uni- obuda.hu

23 Részhalmaz Az aktuális sorhoz képest +/- 33,333% SELECT deptno, ename, sal, count(*) OVER ( order by sal range between sal/3 preceding and sal/3 following ) as DB FROM emp; 2014. 07. 20.23szabo.zsolt@nik.uni- obuda.hu

24 Egyéb analitikus- és hisztogram-függvények 2014. 07. 20.24szabo.zsolt@nik.uni-obuda.hu

25 Egyéb analitikus függvények FIRST_VALUE(), LAST_VALUE()  csoport valamilyen sorrend szerinti első vagy utolsó eleme (nem-determinisztikus?) SELECT ename, sal, FIRST_VALUE(ename) OVER (order by sal asc) FROM emp; SELECT deptno, ename, sal, FIRST_VALUE(empno) OVER (partition by deptno order by sal asc) as FIRST_ID, FIRST_VALUE(ename) OVER (partition by deptno order by sal asc) as FIRST_NAME FROM emp; 2014. 07. 20.25szabo.zsolt@nik.uni- obuda.hu

26 Egyéb analitikus függvények SELECT deptno, ename, sal, LAST_VALUE(empno) OVER (partition by deptno order by sal asc) as LAST_ID, LAST_VALUE(ename) OVER (partition by deptno order by sal asc) as LAST_NAME FROM emp;  ??? Állandóan változó értékek? LAST_VALUE: "by default is the CURRENT ROW and UNBOUNDED PRECEDING" 2014. 07. 20.26szabo.zsolt@nik.uni- obuda.hu

27 Egyéb analitikus függvények SELECT deptno, ename, sal, LAST_VALUE(empno) OVER (partition by deptno order by sal asc rows between current row and unbounded following) as LAST_ID, LAST_VALUE(ename) OVER (partition by deptno order by sal asc rows between current row and unbounded following) as LAST_NAME FROM emp; 2014. 07. 20.27szabo.zsolt@nik.uni- obuda.hu

28 Egyéb analitikus függvények RATIO_TO_REPORT()  Részesedés az összegből SELECT ename, sal, RATIO_TO_REPORT(sal) OVER () as RAT FROM emp ORDER BY sal desc; SELECT deptno, ename, sal, RATIO_TO_REPORT(sal) OVER (partition by deptno) as RAT FROM emp ORDER BY deptno, sal desc; 2014. 07. 20.28szabo.zsolt@nik.uni- obuda.hu

29 Hisztogram függvények Eredetileg: az értelmezési tartományon belül az egyes értékekhez hány mérési eredmény tartozik (mérés helyett: képfeldolgozás?) Ezúttal: Nem pontos egyezést, hanem intervallumokba esést vizsgálunk Oracle segítségével: automata intervallumokra osztás és intervallumba való tartozás vizsgálata 2014. 07. 20.29szabo.zsolt@nik.uni- obuda.hu

30 Hisztogram függvények WIDTH_BUCKET(oszlop, minimum, maximum, intervallumok_száma);  Egyenlő méretű, megadott darabszámú rész-intervallum létrehozása a megadott [minimum..maximum[ intervallumon belül NTILE(darabszám) OVER ([PARTITION BY xxx] ORDER BY yyy)  Egyenlő taglétszámú, megadott darabszámú rész-intervallum létrehozása a sorrendezett mező szerint 2014. 07. 20.30szabo.zsolt@nik.uni- obuda.hu

31 Hisztogram függvények SELECT ename, sal, width_bucket(sal, 0, 6000, 5) as histo FROM emp ORDER BY sal; SELECT ename, sal, ntile(5) over (order by sal) as histo FROM emp ORDER BY sal; SELECT ename, sal, width_bucket(sal, (select min(sal) from emp), (select max(sal) from emp), 5) as histo FROM emp ORDER BY sal; SELECT deptno, ename, sal, ntile(2) over (partition by deptno order by sal) as histo FROM emp ORDER BY deptno, sal; 2014. 07. 20.31szabo.zsolt@nik.uni- obuda.hu


Letölteni ppt "2014. 07. 20. ADATBÁZISOK"

Hasonló előadás


Google Hirdetések