当前位置: 代码迷 >> 综合 >> Oracle rank() over 与 row_number() over
  详细解决方案

Oracle rank() over 与 row_number() over

热度:88   发布时间:2023-12-16 04:47:03.0

通常上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>

 

 

 

  相关解决方案