在SQL中对表格数据排名时,常可以用到分析排名函数,但Oracle在排名上有两种不同的函数:dense_rank和rank。
这两种函数在分析的用途上大同小异,主要区别在于对相同数据的排名。
实际举例如下。
列出示例数据:
SQL> Select rownum id from dual connect by rownum<5
2 union all
3 select rownum id from dual connect by rownum<3;
ID
----------
1
2
3
4
1
2
6 rows selected
可见数据上id为1,2的都重复了,那么它们的排名应该是一样的,那么id为3的话,应该排第几位呢。
注意以下dense_rank和rank在对id为3的排名的区别。
SQL> with t as (
2 select rownum id from dual connect by rownum<5
3 union all
4 select rownum id from dual connect by rownum<3)
5 select dense_rank() over (order by id) rank,
6 id
7 from t;
RANK ID
---------- ----------
1 1
1 1
2 2
2 2
3 3
4 4
6 rows selected
SQL> with t as (
2 select rownum id from dual connect by rownum<5
3 union all
4 select rownum id from dual connect by rownum<3)
5 select rank() over (order by id) rank,
6 id
7 from t;
RANK ID
---------- ----------
1 1
1 1
3 2
3 2
5 3
6 4
6 rows selected
可见dense_rank在处理重复数据的排名时,属于密集型排名,而rank则不是。