类别:

:doc:`/sql-reference/functions-window-syntax`(排名)

ROW_NUMBER

返回窗口分区内每行的唯一行号。

行号从 1 开始,并按顺序继续增大。

语法

ROW_NUMBER() OVER (
  [ PARTITION BY <expr1> [, <expr2> ... ] ]
  ORDER BY <expr3> [ , <expr4> ... ] [ { ASC | DESC } ]
  )
Copy

实参

无。

使用说明

  • expr1expr2 指定作为分区依据的列或表达式。可以按零个、一个或多个表达式进行分区。

    例如,假设您正在跨多个州(或省)选择数据,并且希望每个州内的行号从 1 排列到 N;在这种情况下,可以按州进行分区。

    如果只需要一个组,则省略 PARTITION BY 子句。

  • expr3expr4 指定用于确定行顺序的列或表达式。可以按一个或多个表达式进行排序。

    例如,如果要按玉米产量依序列出农民,请使用 bushels_produced 列。有关详细信息,请参阅 `示例`_(本主题内容)。

示例

下面的查询显示了如何在分区中分配行号。在这种情况下,分区是证券交易所(例如,“N”代表“NASDAQ”)。

SELECT
    symbol,
    exchange,
    shares,
    ROW_NUMBER() OVER (PARTITION BY exchange ORDER BY shares) AS row_number
  FROM trades;
Copy
+------+--------+------+----------+
|SYMBOL|EXCHANGE|SHARES|ROW_NUMBER|
+------+--------+------+----------+
|SPY   |C       |   250|         1|
|AAPL  |C       |   250|         2|
|AAPL  |C       |   300|         3|
|SPY   |N       |   100|         1|
|AAPL  |N       |   300|         2|
|SPY   |N       |   500|         3|
|QQQ   |N       |   800|         4|
|QQQ   |N       |  2000|         5|
|YHOO  |N       |  5000|         6|
+------+--------+------+----------+
语言: 中文