Skip to content

ROW_NUMBER

功能描述

ROW_NUMBER是一种窗口函数,它为结果集中的每一行分配一个唯一的数字值。这个数字值是根据指定的排序顺序获得,可以用来对结果集中的行进行编号或排序。

注意:

ROW_NUMBER函数会根据排序顺序为每一行分配连续的数字值,但不会跳过重复的值。如果有多行具有相同的排序值,则它们具有相同的行号。如果想要跳过重复的值,可以使用其他窗口函数如RANK或DENSE_RANK。

语法格式

ROW_NUMBER() OVER (ORDER BY column1, column2, ...)

参数说明

  • ORDER BY:可选,用于指定排序的列和排序顺序。
  • column:排序的列。

函数返回类型

INTEGER或BIGINT类型。

示例

  • 示例1
    从EMP表中选择的员工编号(EMPNO)、经过四舍五入的薪水(SAL)以及为每一行分配的唯一行号(SO_SAL)。

    sql
    SQL> SELECT EMPNO, ROUND(SAL,0) SAL, ROW_NUMBER() OVER() AS SO_SAL FROM EMP;
    
    EMPNO | SAL | SO_SAL | 
    ------------------------------------------------------------------------------
    7369| 800| 1 |
    7499| 1600| 2 |
    7521| 1250| 3 |
    7566| 2975| 4 |
    7654| 1250| 5 |
    7698| 2850| 6 |
  • 示例2
    按部门(DEPTNO)对员工进行分组,并在每个部门内按DEPTNO和EMPNO排序。

    sql
    SQL> SELECT EMPNO,ROUND(SAL,0) SAL,ROW_NUMBER() OVER(PARTITION BY DEPTNO ORDER BY DEPTNO,EMPNO) AS SO_SAL FROM EMP;
    
    EMPNO | SAL | SO_SAL | 
    ------------------------------------------------------------------------------
    7369| 800| 1 |
    7566| 2975| 2 |
    7499| 1600| 1 |
    7521| 1250| 2 |
    7654| 1250| 3 |
    7698| 2850| 4 |