Robert Wrembel Politechnika Poznańska, Instytut Informatyki 1 Funkcje analityczne SQL Funkcje analityczne SQL – – CUBE CUBE (1) (1) select job, deptno, sum(sal) from emp group by cube(job, deptno); JOB DEPTNO SUM(SAL) --------- ---------- ---------- 29025 10 8750 20 10875 30 9400 CLERK 4150 CLERK 10 1300 CLERK 20 1900 CLERK 30 950 ANALYST 6000 ANALYST 20 6000 MANAGER 8275 MANAGER 10 2450 MANAGER 20 2975 MANAGER 30 2850 SALESMAN 5600 SALESMAN 30 5600 PRESIDENT 5000 PRESIDENT 10 5000 cl an ma sa pr 10 1300 2450 5000 1900 6000 2975 950 2850 5600 9400 30 10875 20 8750 4150 6000 8275 5600 5000 29025
24
Embed
Funkcje analityczne SQL – CUBE · Robert Wrembel Politechnika Poznańska, Instytut Informatyki 1 Funkcje analityczne SQL – CUBE (1) select job, deptno, sum(sal) from emp group
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Robert WrembelPolitechnika Poznańska, Instytut Informatyki 1
Funkcje analityczne SQL Funkcje analityczne SQL –– CUBE CUBE (1)(1)
select job, deptno, sum(sal)from emp group by cube(job, deptno);
Robert WrembelPolitechnika Poznańska, Instytut Informatyki 2
Funkcje analityczne SQL Funkcje analityczne SQL –– CUBE CUBE (2)(2)
CUBE (job, deptno, mgr) jest równoważne:
select ... group by jobunion allselect ... group by deptnounion allselect ... group by mgrunion allselect ... group by job, deptnounion allselect ... group by job, mgrunion allselect ... group by deptno, mgrunion all select ... group by job, deptno, mgrunion allselect ..."total";
Robert WrembelPolitechnika Poznańska, Instytut Informatyki 3
Funkcje analityczne SQL Funkcje analityczne SQL –– ROLLUP ROLLUP (1)(1)
select job, deptno, sum(sal)from emp group by ROLLUP(job, deptno);
Robert WrembelPolitechnika Poznańska, Instytut Informatyki 10
Funkcje analityczne SQL Funkcje analityczne SQL –– RANKRANK
wyznaczanie rankingu
select *from
(select d.dname, sum(e.sal+nvl(comm, 0)) as total_sal,RANK() over (order by sum(e.sal+nvl(comm, 0)) desc nulls last) as rank,DENSE_RANK() over (order by sum(e.sal+nvl(comm, 0)) desc nulls last) as drankfrom dept d, emp ewhere d.deptno=e.deptnogroup by d.dname)
Robert WrembelPolitechnika Poznańska, Instytut Informatyki 13
Funkcje analityczne SQL Funkcje analityczne SQL –– RANK RANK what what if analysis
wyznaczanie hipotecznego rankingu pracownika o zarobkach 4000
select RANK(4000) WITHIN GROUP (order by sal desc) as hrankfrom emp;
if analysis
pensja 4000 byłaby drugą co do wielkości
HRANK----------
2
Robert WrembelPolitechnika Poznańska, Instytut Informatyki 14
Funkcje analityczne SQL Funkcje analityczne SQL –– NTILENTILE
dzieli uporządkowany zbiór wynikowy na n podzbiorów każdy podzbiór otrzymuje numerliczba rekordów w podzbiorach różni się maksymalnie o 1zakres wartości minimalnej i maksymalnej w tym samym podzbiorze może być szeroki
select ename, sal, NTILE(2) over(order by sal desc) as "ntile(2)"
from empwhere deptno=20;
ENAME SAL ntile(2)------- ----- ----------SCOTT 3000 1 FORD 3000 1 JONES 2975 1 ADAMS 1100 2 SMITH 800 2
Robert WrembelPolitechnika Poznańska, Instytut Informatyki 15
Funkcje analityczne SQL Funkcje analityczne SQL ––WIDTH_BUCKETWIDTH_BUCKET
dzieli uporządkowany zbiór wynikowy na n podzbiorów; zbiór wynikowy zawiera rekordy z zadanego przedziałuliczba rekordów w podzbiorach może się różnić znaczącozakres wartości minimalnej i maksymalnej w tym samym podzbiorze powinien być niewielki
ENAME SAL WB------- ------ ---SMITH 800 0 JAMES 950 0 ALLEN 1600 1 WARD 1250 1 ADAMS 1100 1 TURNER 1500 1 MARTIN 1250 1 MILLER 1300 1 JONES 2975 2 BLAKE 2850 2 CLARK 2450 2 SCOTT 3000 3 FORD 3000 3 KING 5000 5
wartości < 1000
zakres dziedziny <1000, 5000) jest dzielony na 4 równej szerokości przedziały: <1000, 2000), <2000, 3000), <3000, 4000), <4000, 5000)przedział <4000, 5000) nie ma rekordów
select ename, sal, WIDTH_BUCKET(sal, 1000, 5000, 4) as WB
from emporder by WB;
wartości >= 5000 zakres wartości <1000, 5000)
Robert WrembelPolitechnika Poznańska, Instytut Informatyki 16
Funkcje analityczne SQL Funkcje analityczne SQL –– suma suma kumulacyjna kumulacyjna (1)(1)
select deptno, sum(sal), sum(sum(sal))over (order by deptno rows unbounded preceding)
as cum_sumfrom empgroup by deptno;
suma kumulacyjna jest obliczana z wykorzystaniem bieżącego rekordu i wszystkich rekordów go poprzedzających
Robert WrembelPolitechnika Poznańska, Instytut Informatyki 23
Funkcje analityczne SQL Funkcje analityczne SQL –– LAG i LEADLAG i LEAD
umożliwiają dostęp do wartości atrybutów rekordów poprzedzających dany rekord (LAG) lub następujących po danym rekordzie (LEAD)argument wywołania funkcji określa przesunięcie w tył/przód względem bieżącego rekordu
SELECT t.month, SUM(f.purchase_price) as sales,LAG(SUM(f.purchase_price),1)
OVER (ORDER BY t.month) as sales_last_month,LEAD(SUM(f.purchase_price),1)
OVER (ORDER BY t.month) as sales_next_monthFROM purchases f, time tWHERE f.time_key = t.time_key AND t.year = 1999GROUP BY t.month;