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 ADATBÁZISOK

2 ISMÉTLÉS

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 obuda.hu

4 ANALITIKUS és RANGFÜGGVÉNYEK

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 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) 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; obuda.hu

8 Partition by Csoportokra bontott rang SELECT deptno, ename, sal, RANK() OVER ( PARTITION BY deptno ORDER BY sal ) as RANG FROM emp; 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; 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” 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; 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 obuda.hu

13 CSOPORTOSÍTÓ FÜGGVÉNY ANALITIKUS ZÁRADÉKKAL

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 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; 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; obuda.hu

17 CSOPORTOSÍTÓ FÜGGVÉNY ANALITIKUS ZÁRADÉKKAL ÉS ABLAK-KEZELÉSSEL

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; 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; 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; 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; 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 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; obuda.hu

24 Egyéb analitikus- és hisztogram-függvények

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; 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" 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; 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; 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 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 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; obuda.hu


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

Hasonló előadás


Google Hirdetések