analitikus, statisztikai és szélsőérték fv-k
DESCRIPTION
Analitikus, statisztikai és szélsőérték fv-k. 2012. 04.17. Hári Veronika harivero @ gmail.com hari.veronika @ nik.uni-obuda.hu. - PowerPoint PPT PresentationTRANSCRIPT
Analitikus, statisztikai és szélsőérték fv-k
2012. 04.17. Hári Veronika [email protected]
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 (partíción belüli rendezés)• Ablak tag: kijelöli minden partíción belül azt az összefüggő
táblatartományt, melynek sorain történik az analitikus fg. által kijelölt műveletvégzéstlehet 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
• Rangsorolást végeznek• Hiányzó partíció tag esetén az egész táblán
rangsorolnak
RANG fv-k
• RANK:1-től partíció méretéig sorszámozza (ellátja „rang”-gal) a sorokat
• DENSE_RANKu. a., mint a RANK, de ha 2 sornak ugyanazt a rangot adja, a következőnél a következő sorszámot adja (nem hagy ki sorszámot)
• PERCENT_RANK0-1 tartományban ossza ki a rangokat, úgy, hogy ha a sor rangja n, a partíció k sorból áll, akkor arang=(n-1)/(k-1)
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 szazFROM emp;
Aggregáló RANG fv-k
• OVER helyett WITHIN GROUP opcióval vannak ellátva
• Nem is analitikus fv-k (működésük mögött analitikus fv.-k állnak)
• Paraméterként megadott konstans kifejezés értékének helyét keresi meg az egyes partíciókban, azt feltételezve, hogy ez a konstans az egyes partíciók eleme
• A paraméterlista már nem üres• Mi lenne, ha... típusú 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 SzrangFROM emp;
Statisztikai analitikus fv-k
• Hagyományos statisztikai fv-knek (sum, min, max stb.) létezik analitikus alakja.
• Használata:fv_neve (paraméter/ALL/DISTINCT) OVER ( záradék )
Példa
• Dolgozók fizetésének folyamatosan halmozott összege (kumulált összeg), fizetés szerint növekvően rendezve:
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 é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 név, sal as fizetés, RATIO_TO_REPORT(sal) OVER () as részesedésFROM empORDER 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– „azonos szélességű” hisztogram készíthető
segítségével, azaz meghatározza, hogy azonos méretű értéktartományokban az oszlopkifejezés értékei hogyan oszlanak meg
Példa
• 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 kategoriaFROM empORDER 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)
• Először rendez (Rendező tag szerint), majd a kifejezés értékének megfelelő számú résztartományra bont
Példa
• Listázzuk fizetés szerint rendezve a dolgozók nevét, fizetését és fizetési kategóriáját, ahol ez utóbbit az összes dolgozó fizetési tartományának 3 részre osztásával úgy kapjuk meg, hogy minden részbe közel azonos számú dolgozó kerüljön.
• SELECT ename, sal,NTILE(3) OVER (order by sal DESC) as kategoriaFROM emp;
Köszönöm a figyelmeteket!