分析函数

Oracle从8.1.6开始提供分析函数。分析函数是对一组查询结果进行运算,然后获得结果,从这个意义上,分析函数非常类似于聚合函数,区别在于每个组返回多行,聚合函数每组返回一行。聚合函数是对一个查询结果中的每个分组进行运算,并且对每个分组产生一个运算结果。分析函数也是对一个查询结果中的每个分组进行运算,但每个分组对应的结果可以有多个。
分析函数的语法:
函数名([参数]) OVER([分区子句] [排序子句])
在语法中:
函数名:分析函数名字
参数:函数需要传入的参数
分区子句(PARTITION BY):将查询结果分为不同的组,功能类似于GROUP BY语句,是分析函数工作的基础。默认是将所有结果作为一个分组。
排序子句(ORDER BY):将每个分区进行排序
RANK、DENSE_RANK、ROW_NUMBER函数为每条记录产生一个从1开始至N的自然数,N的值可能小于等于记录的总数。这3个函数的唯一区别在于当遇到相同数据时的排名策略。3个函数用于解决累计排名问题。
1、ROW_NUMBER
ROW_NUMBER函数返回一个唯一的值,当遇到相同数据时,排名按照记录集中记录的顺序依次递增。
2、DENSE_RANK
DENSE_RANK函数返回一个唯一的值,除非遇到相同数据时,此时所有相同数据的排名都是一样的。
3、RANK
RANK函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条记录的排名之间空出排名。
SELECT ename,deptno,sal,
--按照每个部门分组,对薪水从大到小排序,每个部门序号从1开始,同一个部门相同薪水序号相同,
--且和下一条不同记录的排名之间空出排名
RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) "RANK",
--按照每个部门分组,对薪水从大到小排序,每个部门序号从1开始,同一个部门相同薪水序号相同,
--且和下一条不同记录之间不空出排名
DENSE_RANK() OVER (PARTITION BY deptno ORDER BY sal DESC) "DENSE_RANK",
--按照每个部门分组,对薪水从大到小排序,每个部门序号从1开始,同一个部门相同薪水序号继续
--递增,顺序排名
ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal DESC) "ROW_NUMBER"
FROM emp;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值