oracle 分析函数之一

分析函数和聚合函数相似,但是对于每一组记录,无论多少行,聚合函数只返回一行值,而分析函数对其中每一条记录都返回值。

1.排名
几种排名需求:

  • 排名无并列,且每个排名与紧接着的下一个排名都是连续的;----row_number
  • 排名有并列,且并列的排名与紧接着的下一个排名不连续;----rank
  • 排名有并列,且并列的排名与紧接着的下一个排名连续;----dense_rank
-- 把2013年4月销售额的数据取出来,然后按照销售额的高低在每个部门进行各自的排序;

select dept_id,sale_date,goods_type,sale_cnt,
row_number()over(partition by dept_id order by sale_cnt desc) rn,
rank()over(partition by dept_id order by sale_cnt desc) rk,
dense_rank()over(partition by dept_id order by sale_cnt desc)drk
from lw_sales
where trunc(sale_date,'MM')=date'2013-04-01';

注:
-- 排名分析函数不需要参数
-
- 排名分析函数里的order by 子句是必须的
– partition by 和 order by后均可跟多列

2.相邻

  • lag是取到排序后当前记录之前的记录
  • lead是取到排序后当前记录之后的记录
select dept_id,sale_cnt,
lag(sale_cnt,1,0)over(partition by dept_id order by sale_cnt) lower_cnt,
lead(sale_cnt,1,9999)over(partition by dept_id order by sale_cnt)
from lw_sales;

LAG/LEAD(v,n,dv)里的n表示位移,必须是0或正整数,dv是在没有取到对应值时的默认值。n默认是1,dv默认是null。
相邻类分析函数后面的order by子句是必须的。
partition by和order by后均可跟多列。



3.统计
见下篇文章……

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值