ROW_NUMBER 範圍函數 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

ROW_NUMBER 範圍函數

根據 OVER 子句中的 ORDER BY 運算式,指派一組列之內目前列的序數 (從 1 起算)。如果有選用的 PARTITION BY 子句,則會重設每一組列的序數。對於 ORDER BY 表達式,具有相等值的列會獲得非決定性的不同列號。

語法

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

引數

( )

此函數不接受引數,但需要空括號。

OVER

ROW_NUMBER 函數的範圍函數子句。

PARTITION BY expr_list

選用。將結果分割成多組列的一或多個欄運算式。

ORDER BY order_list

選用。定義集合中資料列順序的一或多個資料行運算式。如果未指定 PARTITION BY,ORDER BY 會使用整個資料表。

如果 ORDER BY 未產生唯一排序或被省略,則列的順序不確定。如需詳細資訊,請參閱 範圍函數的資料唯一排序

傳回類型

BIGINT

範例

下列範例使用 WINSALES 資料表。如需 WINSALES 資料表的描述,請參閱範圍函數範例的範例資料表

下列範例依數量對資料表進行排序 (以遞增順序),然後將列號指派給每一列。套用範圍函數結果之後排序結果。

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