

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# ROW\$1NUMBER 窗口函数
<a name="r_WF_ROW_NUMBER"></a>

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

## 语法
<a name="r_WF_ROW_NUMBER-synopsis"></a>

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

## 参数
<a name="r_WF_ROW_NUMBER-arguments"></a>

( )   
该函数没有参数，但需要空括号。

OVER   
适用于 ROW\$1NUMBER 函数的窗口函数子句。

PARTITION BY *expr\$1list*   
可选。一个或多个将结果划分成行集的列表达式。

ORDER BY *order\$1list*   
可选。一个或多个定义集合内的行顺序的列表达式。如果未指定 PARTITION BY，则 ORDER BY 使用整个表。  
如果 ORDER BY 未生成唯一顺序或被省略，则行的顺序是不确定的。有关更多信息，请参阅 [窗口函数的唯一数据排序](c_Window_functions.md#r_Examples_order_by_WF)。

## 返回类型
<a name="c_Supported_data_types_r_WF_ROW_NUMBER"></a>

BIGINT

## 示例
<a name="r_WF_ROW_NUMBER-examples"></a>

下面的示例使用 `WINSALES` 表。有关 `WINSALES` 表的说明，请参阅[窗口函数示例的示例表](c_Window_functions.md#r_Window_function_example)。

以下示例按 QTY 对表进行排序（按升序），然后为每个行分配一个行号。在应用窗口函数结果后，对结果进行排序。

```
SELECT salesid, sellerid, qty, 
ROW_NUMBER() OVER(
   ORDER BY qty ASC) AS row
FROM winsales
ORDER BY 4,1;

salesid   sellerid   qty   row
---------+----------+-----+-----
   30001 |        3 |  10 |   1	
   10001 |        1 |  10 |   2	
   10006 |        1 |  10 |   3
   40005 |        4 |  10 |   4
   30003 |        3 |  15 |   5
   20001 |        2 |  20 |   6
   20002 |        2 |  20 |   7
   30004 |        3 |  20 |   8
   10005 |        1 |  30 |   9
   30007 |        3 |  30 |  10
   40001 |        4 |  40 |  11
```

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

```
SELECT salesid, sellerid, qty, 
ROW_NUMBER() OVER(
  PARTITION BY sellerid
  ORDER BY qty ASC) AS row_by_seller
FROM winsales
ORDER BY 2,4;

 salesid | sellerid | qty | row_by_seller
---------+----------+-----+-----
   10001 |        1 |  10 |   1
   10006 |        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
```

以下示例显示了不使用可选子句时的结果。

```
SELECT salesid, sellerid, qty, ROW_NUMBER() OVER() AS row
FROM winsales
ORDER BY 4,1;

salesid   sellerid   qty   row
---------+----------+-----+-----
   30001 |        3 |  10 |   1	
   10001 |        1 |  10 |   2	
   10005 |        1 |  30 |   3
   40001 |        4 |  40 |   4
   10006 |        1 |  10 |   5
   20001 |        2 |  20 |   6
   40005 |        4 |  10 |   7
   20002 |        2 |  20 |   8
   30003 |        3 |  15 |   9
   30004 |        3 |  20 |  10
   30007 |        3 |  30 |  11
```