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

前端之家收集整理的这篇文章主要介绍了Oracle 排序分析函数之ROW_NUMBER、RANK和DENSE_RANK简析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这三个函数都是排序函数,那么有什么不同呢,下面看个例子:
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不会跳号。

猜你在找的Oracle相关文章