初学PL/SQL。
在oracle中,使用RANK,DENSE_RANK和ROW_NUMBER这3个分析函数都可以进行对记录的编号,在处理记录排名方面可以考虑使用以上三种方法之一。
RANK:通过对order by 后的条件,对每一行进行编号,当比较字段相等时,两行拥有相同的编号,接下来的下一条记录进行跳号。
DENSE_RANK:排序方式同RANK,比较字段相等的记录同样拥有相同编号,接下来的下一条记录不跳号,拥有连续的编号。
ROW_NUMBER:排序方式同RANK,即使存在重复条件的记录,编号也是始终递增,拥有连续的编号。
建立emp员工表
create table emp ( empno number primary key, ename varchar2(20) not null, deptno varchar2(20) not null, sal number , hiredate date not null );
现在,需要对 emp表中不同部门的员工进行薪水的排名。
select e.*,RANK() over (partition by deptno order by sal desc nulls last) rank排名, DENSE_RANK() over (partition by deptno order by sal desc nulls last) dense排名, ROW_NUMBER() over (partition by deptno order by sal desc nulls last) row排名 from emp e order by deptno;
获得结果如下:
比较第五条记录的rank排名和dense排名就会得到跳号与不跳号的区别,而ROW_NUMBER不论比较条件的值是否是相同的,总是会顺序递增的进行编号。这三种不同函数适用于不同的业务场景。
另:null在窗体中会排在其他值的前面,使用 NULLS LAST 语句,使得null值排在最后。
本文出自 “嘭,沙卡拉卡” 博客,请务必保留此出处http://10572420.blog.51cto.com/10562420/1716735
原文地址:http://10572420.blog.51cto.com/10562420/1716735