ROW_NUMBER 窗口函数 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

ROW_NUMBER 窗口函数

基于 OVER 子句中的 ORDER BY 表达式确定一组行中当前行的序号(从 1 开始计数)。如果存在可选的 PARTITION BY 子句,则为每组行重置序号。ORDER BY 表达式中具有相同值的行以非确定性的方式接收不同的行号。

Syntax

ROW_NUMBER () OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list ] )

Arguments

( )

该函数没有参数,但需要空括号。

OVER

适用于 ROW_NUMBER 函数的窗口子句。

PARTITION BY expr_list

可选。一个或多个定义 ROW_NUMBER 函数的表达式。

ORDER BY order_list

可选。定义行数基于的列的表达式。如果未指定 PARTITION BY,则 ORDER BY 使用整个表。

如果 ORDER BY 未生成唯一顺序或被省略,则行的顺序是不确定的。有关更多信息,请参阅窗口函数的唯一数据排序

返回类型

BIGINT

Examples

以下示例按 SELLERID 对表进行分区并按 QTY 对每个分区进行排序(按升序顺序),然后为每个行分配一个行号。在应用窗口函数结果后,对结果进行排序。

select salesid, sellerid, qty, row_number() over (partition by sellerid order by qty asc) as row from winsales order by 2,4; salesid | sellerid | qty | row ---------+----------+-----+----- 10006 | 1 | 10 | 1 10001 | 1 | 10 | 2 10005 | 1 | 30 | 3 20001 | 2 | 20 | 1 20002 | 2 | 20 | 2 30001 | 3 | 10 | 1 30003 | 3 | 15 | 2 30004 | 3 | 20 | 3 30007 | 3 | 30 | 4 40005 | 4 | 10 | 1 40001 | 4 | 40 | 2 (11 rows)

有关 WINSALES 表的说明,请参阅窗口函数概述示例