分析函数DENSE_RANK 和 RANK

浏览: 2178
SQL

在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则不是。

推荐 0
本文由 newkoa 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册