温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ORACLE 分析函数应用(一) 记录排名

发布时间:2020-05-07 10:41:59 来源:网络 阅读:718 作者:su_zui 栏目:关系型数据库

         初学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;

    
获得结果如下:

ORACLE 分析函数应用(一) 记录排名


比较第五条记录的rank排名和dense排名就会得到跳号与不跳号的区别,而ROW_NUMBER不论比较条件的值是否是相同的,总是会顺序递增的进行编号。这三种不同函数适用于不同的业务场景。


另:null在窗体中会排在其他值的前面,使用 NULLS LAST 语句,使得null值排在最后。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI