Oracle之row_number() / rank() / dense_rank() / over(partition order by)序列函数

  • RANK():返回数据项在分组中的排名,在排名相等时会在名次中留下空位,造成排名不连续。
  • DENSE_RANK():同样返回数据项在分组中排名,不过在排名相等时不会留下名位空位。
  • CUME_DIST():返回特定值相对于一组值的位置,是累积分布(cumulative distribution)的简写。
  • PERCENT_RANK():返回某个值相对于一组值的百分比排名。
  • NTILE():返回n分片后的值,如三分片、四分片等。

  • ROW_NUMBER():为每一条分组记录返回一个数字,注意不同于rownum伪列。

ROW_NUMBER() :1.2.3.4.。。。。
select sal,empno,ename,row_number() over(order by sal) from emp;

DENSE_RANK():连续排序不跳跃
select sal,empno,ename,dense_rank() over(order by sal) from emp;

RANK():不连续,跳跃
select sal,empno,ename,rank() over(order by sal) from emp;


partition by相当于group by,根据order分组。

特别注意:

select row_number()over(partition by deptno order by deptno),deptno,sal from emp;

select dense_rank()over(partition by deptno order by deptno),deptno,sal from emp;
select rank()over(partition by deptno order by deptno),deptno,sal from emp;

说明:dense_rank,rank()序号全部显示1,因为order by 的值都是相同的,group by后都是相同的值,所以全部显示1.


row_number函数:连续编号,不跳跃,例如1 2 3 4 5

select deptno,empno,sal,row_number() over(partition by deptno order by sal desc) as row_number from emp;

rank()函数:连续跳跃编号,例如:113。。。

select deptno,empno,sal,rank() over(partition by deptno order by sal desc) as rank from emp;

dense_rank()函数:连续不跳跃编号,例如:112

select deptno,empno,sal,dense_rank() over(partition by deptno order by sal desc) as dense from emp;

 

eg:查询emp表,查询每个部门最高的工资

select * from

(select deptno,sal,row_number() over(partition by deptno order by sal desc) as sn from emp )

where sn=1;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值