Oracle rank() over 与 row_number() over

通常上top N 的实现应该采用row_number() over 而不是rank因为row_number 是给记录加一个序号标记,而rank是相当于进行排序后的排名,也就是如果排序列是相同的,那么他们的返回值也是相同的,但row_number则一个序号标记而不是返回相同值
SQL> select a.* from a;

        ID ENTERDATE                 TIMES
---------- -------------------- ----------
        10 01-1月 -09                    3
        11 02-1月 -09                    0
        12 03-1月 -09                    0
        13 04-1月 -09                    0
        14 05-1月 -09                    2
        15 06-1月 -09                    0
        16 07-1月 -09                    0
        17 08-1月 -09                    0
        18 09-1月 -09                    0
        19 10-1月 -09                    0
        20 11-1月 -09                    6
        21 12-1月 -09                    0
        22 13-1月 -09                    0
        23 14-1月 -09                    0
        24 15-1月 -09                    0
        25 16-1月 -09                    0
        26 17-1月 -09                    0
        27 18-1月 -09                    0

18 rows selected
SQL>select a.*,rank() over(order by times) rank,row_number() over(order by times) row_number from a;

        ID ENTERDATE                 TIMES       RANK ROW_NUMBER
---------- -------------------- ---------- ---------- ----------
        11 02-1月 -09                    0          1          1
        26 17-1月 -09                    0          1          2
        25 16-1月 -09                    0          1          3
        27 18-1月 -09                    0          1          4
        12 03-1月 -09                    0          1          5
        13 04-1月 -09                    0          1          6
        15 06-1月 -09                    0          1          7
        16 07-1月 -09                    0          1          8
        17 08-1月 -09                    0          1          9
        18 09-1月 -09                    0          1         10
        19 10-1月 -09                    0          1         11
        21 12-1月 -09                    0          1         12
        22 13-1月 -09                    0          1         13
        23 14-1月 -09                    0          1         14
        24 15-1月 -09                    0          1         15
        14 05-1月 -09                    2         16         16
        10 01-1月 -09                    3         17         17
        20 11-1月 -09                    6         18         18

18 rows selected

SQL>

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值