ITPub博客

首页 > Linux操作系统 > Linux操作系统 > rank () over ,row_number() over ,rank_dense () over

rank () over ,row_number() over ,rank_dense () over

原创 Linux操作系统 作者:us_yunleiwang 时间:2010-06-02 10:26:25 0 删除 编辑
查看文章 SQL语句中的rank () over , row_number() over ,rank_dense () 总结如下: 我创建了一个表,数据如下, SQL> select * from test; A1 A2 ---------- ---------- 1 3 2 4 3 2 3 5 4 2 然后用rank () over, SQL> select a1,a2,rank () over (order by a1) rank from test; A1 A2 RANK ---------- ---------- ---------- 1 3 1 2 4 2 3 2 3 3 5 3 4 2 5 SQL> select a1,a2,rank () over (order by a2) rank from test; A1 A2 RANK ---------- ---------- ---------- 3 2 1 4 2 1 1 3 3 2 4 4 3 5 5 原来这个就是用来看排名的东东啊。 接下来看看row_number() over, SQL> select a1,a2, row_number () over (order by a1) rank from test; A1 A2 RANK ---------- ---------- ---------- 1 3 1 2 4 2 3 2 3 3 5 4 4 2 5 SQL> select a1,a2, row_number () over (order by a2) rank from test; A1 A2 RANK ---------- ---------- ---------- 3 2 1 4 2 2 1 3 3 2 4 4 3 5 5 黄色标出了区别,这个很容易看清楚吧~~~ 再看看dense_rank () over SQL> select a1,a2, dense_rank () over (order by a1) rank from test; A1 A2 RANK ---------- ---------- ---------- 1 3 1 2 4 2 3 2 3 3 5 3 4 2 4 dense_rank在有出现相同的rank后,rank的值是紧接上一次的rank值。 可以这么理解,我们通常意义上的top N 的实现应该采用row_number() over 而不是rank () over,因为row_number 是给记录加一个序号标记,而rank 是相当于进行排序后的排名,也就是如果排序列是相同的,那么他们的返回值也是相同的,而row_number则不可能返回相同值。 放到一起看看吧: SQL> select a1,a2, 2 rank () over (order by a1) rank, 3 dense_rank () over (order by a1) dense_rank, 4 row_number () over (order by a1) row_number 5 from test; A1 A2 RANK DENSE_RANK ROW_NUMBER ---------- ---------- ---------- ---------- ---------- 1 3 1 1 1 2 4 2 2 2 3 2 3 3 3 3 5 3 3 4 4 2 5 4 5
链接:http://space.itpub.net/?uid-23490154-action-viewspace-itemid-664214

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23490154/viewspace-664214/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: sql2005景象
请登录后发表评论 登录
全部评论

注册时间:2010-03-15

  • 博文量
    198
  • 访问量
    1393137