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)。sqlSQL> 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排序。sqlSQL> 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 |