加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle 排序分析函数之ROW_NUMBER、RANK和DENSE_RANK简析

发布时间:2020-12-12 16:22:27 所属栏目:百科 来源:网络整理
导读:这三个函数都是排序函数,那么有什么不同呢,下面看个例子: SQL select empno,2 ename,3 deptno,4 sal,5 row_number() over(partition by deptno order by sal) sql_rownum,6 rank() over(partition by deptno order by sal) sql_rank,7 dense_rank() over(
这三个函数都是排序函数,那么有什么不同呢,下面看个例子:
SQL> select empno,2         ename,3         deptno,4         sal,5         row_number() over(partition by deptno order by sal) sql_rownum,6         rank() over(partition by deptno order by sal) sql_rank,7         dense_rank() over(partition by deptno order by sal) as sal_denserank
  8    from emp;
EMPNO ENAME          DEPTNO        SAL SQL_ROWNUM   SQL_RANK SAL_DENSERANK
---------- ---------- ---------- ---------- ---------- ---------- -------------
      7934 MILLER             10       1300          1          1             1
      7782 CLARK              10       2450          2          2             2
      7839 KING               10       5000          3          3             3
      7369 SMITH              20        800          1          1             1
      7566 JONES              20       2975          2          2             2
      7902 FORD               20       3000          3          3             3
      7900 JAMES              30        950          1          1             1
      7521 WARD               30       1250          2          2             2
      7654 MARTIN             30       1250          3          2             2
      7844 TURNER             30       1500          4          4             3
      7499 ALLEN              30       1600          5          5             4
      7698 BLAKE              30       2850          6          6             5
已选择12行。
上面SQL中,这三个函数都采用deptno列进行分组,以列sal进行升序排序。
我们看empno为7900-7698的行。在相同分组和相同字段相同顺序排序的情况下:row_number函数只是单纯的返回行排序后的序号;rank函数在sal相同时,采用相同的行号,但是之后的行会继续按单纯的排序号继续编号;
dense_rank返回在结果,会在sal相同时采用相同的排序号,但是之后按上面的序号继续排序。
也就是我们通过说rank会跳号,dense_rank不会跳号。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读