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

ADATBÁZISOK http://users.nik.uni-obuda.hu/szabozs/ 2017.04.04. szabo.zsolt@nik.uni-obuda.hu.

Hasonló előadás


Az előadások a következő témára: "ADATBÁZISOK http://users.nik.uni-obuda.hu/szabozs/ 2017.04.04. szabo.zsolt@nik.uni-obuda.hu."— Előadás másolata:

1 ADATBÁZISOK http://users.nik.uni-obuda.hu/szabozs/ 2017.04.04.

2 ISMÉTLÉS

3 SELECT Záradékok sorrendje
INTO FROM WHERE GROUP BY HAVING UNION/MINUS INTERSECT ORDER BY

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

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)

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;

8 Partition by Csoportokra bontott rang
SELECT deptno, ename, sal, RANK() OVER ( PARTITION BY deptno ORDER BY sal ) as RANG FROM emp;

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;

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”

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;

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

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

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;

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;

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;

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;

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;

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;

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

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;

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;

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"

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;

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;

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

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

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;


Letölteni ppt "ADATBÁZISOK http://users.nik.uni-obuda.hu/szabozs/ 2017.04.04. szabo.zsolt@nik.uni-obuda.hu."

Hasonló előadás


Google Hirdetések