Analitikus függvények Zoltán Botond 2013.04.16.
A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele a minimum elégséges érdemjegynek! Zoltán Botond 2013.04.16.
Analitikus fv-k Új szemléletet jelentenek Ezek a függvények nincsenek az SQL nyelvben Új függvény család Gazdasági felhasználásra, statisztikai számításokra tervezték Mozgó „ablakon” végzett számítások Zoltán Botond 2013.04.16.
Analitikus fv-k Három nagy csoportjuk van RANG Statisztikai Hisztogram Zoltán Botond 2013.04.16.
Általános felépítés Fv_neve( [paraméter] ) OVER ( záradék ) Mindig a SELECT utasításrészben találhatóak A paraméter tetszőleges oszlopkifejezés lehet Például: mgr, &fiz stb. Az OVER záradék elhagyható OVER() Zoltán Botond 2013.04.16.
A záradék bővebben – Partíció-tag ([partíció tag] [rendező tag[ablak-tag]]) A munkaterületet jelöli ki az analitikus záradék Partíció tag: Egy munkatábla munkaterületén összefüggő táblatartományokat képezhetünk, ahol az oszlopkifejezések értéke azonos Zoltán Botond 2013.04.16.
A záradék bővebben – Rendező-TAG ([partíció tag] [rendező tag[ablak-tag]]) Rendező tag: ORDER BY A partíciókon belül rendez Sokszor azonos a paraméterrel Amikor elhagyjuk a paramétert, akkor tulajdonképpen a rendező tag a paraméter Zoltán Botond 2013.04.16.
A záradék bővebben – ABLAK-TAG ([partíció tag] [rendező tag[ablak-tag]]) Az ablaktag az aktuális sortól rögzített méretű és a partíció résztartományán folyamatosan mozgó táblatartomány. Az ablakon megy végbe a művelet Zoltán Botond 2013.04.16.
A záradék bővebben – ABLAK-TAG ([partíció tag] [rendező tag[ablak-tag]]) Az ablak tag használatakor az analitikus függvény, amelyben A csoportképző attribútum a paraméter Hatóköre pedig az ablak Ablak tag: lehet Fizikai – ROWS Megadhatjuk például, hogy az aktuális sortól 10-et nézzen felfele és 4-et lefele Logikai – RANGE Megadhatjuk például, hogy az aktuális sortó a partíció végéig vegye figyelembe a sorokat Zoltán Botond 2013.04.16.
RANG függvények Over opcióval ellátott RANK DENSE_RANK PERCENT_RANK Különlegességük, hogy nem tartalmaz ablak tagot Zoltán Botond 2013.04.16.
Példa SELECT ename as nev, sal as fizu, RANK() OVER (Order by sal DESC) as normr, DENSE_RANK() OVER (Order by sal DESC) as tomor, PERECENT_RANK() OVER (Order by sal DESC) as szaz FROM emp; Itt mit tekinthetünk paraméternek? Mi az értelmezési tartomány? Zoltán Botond 2013.04.16.
Példa Készítsünk egy scriptet, amely a részlegek rangsorát megadja, hogy hányan dolgoznak ott a részlegek neve is legyen kiírva. Zoltán Botond 2013.04.16.
Példa – 1. lépés create or replace view nezet as select emp.deptno as részleg, COUNT(emp.deptno) as "dolgozók száma", RANK() OVER (Order by count(emp.deptno) desc) as rangsor From emp group by emp.deptno; Zoltán Botond 2013.04.16.
Példa – 2. lépés select nezet.*, dept.dname from nezet, dept where nezet.részleg = dept.deptno; Zoltán Botond 2013.04.16.
Aggregáló RANG fv-k OVER helyett WITHIN GROUP opcióval vannak ellátva Nem analitikus függvények A paraméterlistájuk nem üres Mi lenne, ha... típusú feladatok Zoltán Botond 2013.04.16.
Példa Felvennénk egy új dolgozót, Jani bátyát. Írjunk egy szkriptet, mely megmondja, hogy egy adott fizetés esetén, hányadik legtöbbet kereső emberke lenne? Magyarán kérjünk be egy fizetést, és nézzük meg, hogy hányadik lenne a rangsorban… Zoltán Botond 2013.04.16.
Példa - megoldás ACCEPT fizu PROMPT ’Fizu: ’; SELECT ’rangsora’ as Kérdés, RANK(&fizu) WITHIN GROUP (Order by sal DESC) as Normrang, DENSE_RANK(&fizu) WITHIN GROUP (Order by sal DESC) as Tomorrang, PERCENT_RANK(&fizu) WITHIN GROUP (Order by sal DESC) as Szrang FROM emp; Zoltán Botond 2013.04.16.
Példa II. Kérjünk be egy fizetést és nézzük meg, hogy hányadik lenne az egyes részlegek rangsorában, tömör rangsorában. Zoltán Botond 2013.04.16.
Példa II. - Megoldás Accept fiz Prompt 'Fizetés: ' Select &fiz as "Megadott fizetés", deptno as részleg, SUM(sal), RANK(&fiz) WITHIN GROUP(ORDER BY sal) as "Normál rangsor", DENSE_RANK WITHIN GROUP(ORDER BY sal) as "Tömör rangsor" From emp Group by deptno; Zoltán Botond 2013.04.16.
Példa III. – Partíciós példa Határozzuk meg a New Yorki és Chicagoi dolgozók fizetési sorrendjét. Mi történik, ha nem használjuk a partíciós tagot? Zoltán Botond 2013.04.16.
Példa III. – Partíciós példa Partíciók nélkül: Break on deptno on loc Select e.deptno, loc, ename, sal, DENSE_RANK() OVER(order by sal desc) as sorrend From emp e, dept d Where e.deptno = d.deptno and loc IN ('NEW YORK', 'CHICAGO'); Zoltán Botond 2013.04.16.
Példa III. – Partíciós példa Partíciókkal: Break on deptno on loc Select e.deptno, loc, ename, sal, DENSE_RANK() OVER(Partition by e.deptno, order by sal desc) as sorrend From emp e, dept d Where e.deptno = d.deptno and loc IN ('New York', 'Chicago'); Zoltán Botond 2013.04.16.
Példa IV. Határozza meg előbb részlegenként és azon belül munkakörönként, majd csak részlegenként a dolgozók fizetési sorrendjét. A lista legyen elsődlegesen a részlegazonosító, másodlagosan a munkakör, harmadlagosan a dolgozók neve szerint rendezve. Zoltán Botond 2013.04.16.
Példa IV. - MEGOLDÁS Példatár 277.oldal 13.13-as példa Zoltán Botond 2013.04.16.
Köszönöm a figyelmeteket! Zoltán Botond 2013.04.16.