oracle中分析函数range值范围,Oracle 分析函数

--每一个值占总数的百分比

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,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值