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不会跳号。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |