Analitikus, statisztikai és szélsőérték fv-k Rózsa Győző
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 • Ezek a fv-k nincsenek az SQL nyelvben • Új fv család • 3 nagy csoport – RANG – Statisztikai – Hisztogram
Á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 • Az OVER záradék elhagyható
A záradék bővebben ([partíció tag] [rendező tag[ablak-tag]]) • Tulajdonképpen 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 • Rendező tag: ORDER BY • Ablak tag: lehet fizikai vagy logikai
RANG fv-k • Over opcióval ellátott – RANK – DENSE_RANK – PERCENT_RANK • Nem tartalmaznak ablak tagot, és paraméterlistájuk üres
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;
Aggregáló RANG fv-k • OVER helyett WITHIN GROUP opcióval vannak ellátva • Nem is analitikus fv-k • A paraméterlista már nem üres • Mi lenne, ha... típusu feladatok
Példa • Felvennénk egy új dolgozót, Jani bátyát. • Írjunk egy szkriptet, mely megmondja, hogy egy adott fizu 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…
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;
Statisztikai analitikus fv-k • Hagyományos stat fv-knek létezik analitikus alakja. • Kis ébresztő: Kisötösért (kisplusz) mondjon valaki 3at) • Használata: fv_neve (paraméter/ALL/DISTINCT) OVER ( záradék )
Példa • SELECT ename, job, SUM(sal) OVER (ORDER BY sal ASC) as ”Kumulalt” FROM emp;
RATIO_TO_REPORT • RATIO_TO_REPORT(kifejezés) OVER ( partíció tag) • Kiszámítja az érték a és a csoportösszeg közötti arányt • (Részesedés) • Írjuk meg, hogy ki milyen arányban részesedik az összfizetésből
Példa • SELECT ename as nev, sal as fizu, RATIO_TO_REPORT(sal) OVER () as részesedés FROM emp ORDER BY sal DESC;
FIRST_VALUE/LAST_VALUE • Hasonló mint a MIN/MAX • De ablaktartományokban is használhatóak • Alakja: FIRST_VALUE/LAST_VALUE(kifejezés) OVER (analitikus utasításrész)
Hisztogram fv-k • WIDTH_BUCKET – WIDTH_BUCKET(oszlopkifejezés, alsóhatár, felsőhatár, szeletek száma) – Nem is analitikus függvény • Csináljunk 4 fizetési kategóriát, és listázzuk ki, hogy ki hova tartozik. • SELECT ename, sal, WIDTH_BUCKET(sal, 800, 5001, 4) as kategoria FROM emp ORDER BY kategoria;
NTILE függvény • Hasonló mint a WIDTH_BUCKET, de itt a hisztogram azonos magasságú, és a szélesség különbözik • Használata: NTILE(kifejezés) OVER ([Partíció] Rendező tag) Pl.:SELECT ename, sal, NTILE(3) OVER (order by sal DESC) as kategoria FROM emp;
Köszönöm a figyelmeteket!