Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Analitikus függvények
Zoltán Botond
2
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
3
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
4
Analitikus fv-k Három nagy csoportjuk van RANG Statisztikai Hisztogram
Zoltán Botond
5
Á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
6
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
7
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
8
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
9
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
10
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
11
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
12
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
13
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
14
Példa – 2. lépés select nezet.*, dept.dname from nezet, dept where nezet.részleg = dept.deptno; Zoltán Botond
15
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
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
17
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
18
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
19
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
20
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
21
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
22
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
23
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
24
Példa IV. - MEGOLDÁS Példatár 277.oldal 13.13-as példa Zoltán Botond
25
Köszönöm a figyelmeteket!
Zoltán Botond
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.