--每一个值占总数的百分比
SELECT x, y, z,round(z/sum(z) over()*100,2)||'%' propn , sum(z) over() sum FROM t1;
--每一个值占分组的百分比
SELECT x, y, z,round(z/sum(z) over(partition by x)*100,2)||'%' propn , sum(z) over(partition by x) sum FROM t1;
--以x分区,按y排序累计取和
SELECT x, y, z, sum(z) over(partition by x order by y desc) sum FROM t1;
--以x分区,按z降序,每个分区取前两个
select *
from (select x,
y,
z,
s,
dense_rank() over(partition by x order by z desc) r1,
rank() over(partition by x order by z desc) r2,
count(*) over(partition by x order by z desc, y range unbounded preceding) r3 from (SELECT x, y, z, sum(z) over(partition by x) s
FROM t1
order by 4 desc, z desc))
where r3 < 3
order by z desc, x
/*
语法:
function_name(,,...)
over()
函数名(参数)
over关键字( :over关键字用于区分普通聚集函数和分析函数,必选
partition子句:将结果集分区分组,当分区变化时重新计数
ORDER BY子句:数据在分区内是如何存储的,会直接影响一些分析函数
windowing子句:一个定义变化或固定的数据窗口方法,用于分析函数计数
range窗口:根据where条件将行集中到一起,如range 5 preceding,产生一个滑动窗口,在分区内拥有所有当前行以前的5行集合,只能用于数值和日期,order by只能有一列
order by sal range 1000 preceding
row窗口:是物理单元,包括在窗口中的行的物理数
order by row 5 preceding
包含6行,当前行以及前面的5行,“前面”是指order by后的
)
*/
select deptno,
empno,