250 likes | 401 Views
Analitikus függvények. 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!. Analitikus fv-k. Új szemléletet jelentenek Ezek a függvények nincsenek az SQL nyelvben Új függvény család
E N D
Analitikusfüggvények Zoltán Botond
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
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
Analitikus fv-k • Három nagy csoportjuk van • RANG • Statisztikai • Hisztogram Zoltán Botond
Á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
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
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
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
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
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
Példa SELECTenameasnev, salas fizu, RANK() OVER (Orderbysal DESC) asnormr, DENSE_RANK() OVER (Orderbysal DESC) astomor, PERECENT_RANK() OVER (Orderbysal DESC) asszazFROM emp; Itt mit tekinthetünk paraméternek? Mi az értelmezési tartomány? Zoltán Botond
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
Példa – 1. lépés createorreplaceviewnezetas selectemp.deptnoas részleg, COUNT(emp.deptno) as "dolgozók száma", RANK() OVER (Orderbycount(emp.deptno) desc) as rangsor Fromemp groupbyemp.deptno; Zoltán Botond
Példa – 2. lépés selectnezet.*, dept.dname fromnezet, dept wherenezet.részleg = dept.deptno; Zoltán Botond
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
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
Példa - megoldás ACCEPT fizu PROMPT ’Fizu: ’;SELECT ’rangsora’ as Kérdés, RANK(&fizu) WITHIN GROUP (Orderbysal DESC) asNormrang, DENSE_RANK(&fizu) WITHIN GROUP (Orderbysal DESC) asTomorrang, PERCENT_RANK(&fizu) WITHIN GROUP (Orderbysal DESC) asSzrangFROM emp; Zoltán Botond
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
Példa II. - Megoldás Accept fiz Prompt 'Fizetés: ' Select&fizas "Megadott fizetés", deptnoas 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" Fromemp Group bydeptno; Zoltán Botond
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
Példa III. – Partíciós példa Partíciók nélkül: Breakondeptnoonloc Selecte.deptno, loc, ename, sal, DENSE_RANK() OVER(orderbysaldesc) as sorrend Fromemp e, dept d Wheree.deptno = d.deptno and loc IN ('NEW YORK', 'CHICAGO'); Zoltán Botond
Példa III. – Partíciós példa Partíciókkal: Breakondeptnoonloc Selecte.deptno, loc, ename, sal, DENSE_RANK() OVER(Partitionbye.deptno, orderbysaldesc) as sorrend Fromemp e, dept d Wheree.deptno = d.deptno and loc IN ('New York', 'Chicago'); Zoltán Botond
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
Példa IV. - MEGOLDÁS Példatár 277.oldal 13.13-as példa Zoltán Botond
Köszönöm a figyelmeteket! Zoltán Botond