Die Fensterfunktion ROW_NUMBER - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Die Fensterfunktion ROW_NUMBER

Weist die Ordnungszahl der aktuellen Zeile innerhalb einer Gruppe von Zeilen zu, ab 1 zählend, basierend auf dem ORDER BY-Ausdruck in der OVER-Klausel. Wenn die optionale PARTITION BY-Klausel vorhanden ist, werden die Ordnungszahlen für jede Gruppe von Zeilen neu festgelegt. Zeilen mit gleichen Werten für die ORDER BY-Ausdrücke erhalten auf nicht deterministische Weise unterschiedliche Zeilenzahlen.

Syntax

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

Argumente

( )

Die Funktion verwendet keine Argumente. Es ist jedoch eine leere Klammer erforderlich.

OVER

Die Fensterfunktionsklausel für die Funktion ROW_NUMBER.

PARTITION BY expr_list

Optional. Ein oder mehrere Spaltenausdrücke, welche die Ergebnisse in Zeilensätze unterteilen.

ORDER BY order_list

Optional. Ein oder mehrere Spaltenausdrücke, welche die Reihenfolge der Zeilen innerhalb eines Satzes definieren. Wenn PARTITION BY nicht angegeben ist, verwendet ORDER BY die gesamte Tabelle.

Wenn ORDER BY nicht zu einer eindeutigen Reihenfolge führt oder ausgelassen wird, ist die Reihenfolge der Zeilen nicht deterministisch. Weitere Informationen finden Sie unter Spezifisches Anordnen von Daten für Fensterfunktionen.

Rückgabetyp

BIGINT

Beispiele

Die folgenden Beispiele verwenden die Tabelle WINSALES. Eine Beschreibung der Tabelle WINSALES finden Sie unter Beispieltabelle mit Beispielen von Fensterfunktionen.

Im folgenden Beispiel wird die Tabelle nach QTY (in aufsteigender Reihenfolge) sortiert. Anschließend wird jeder Zeile eine Zeilennummer zugewiesen. Die Ergebnisse werden sortiert, nachdem die Fensterfunktionsergebnisse angewendet wurden.

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

Im folgenden Beispiel werden die Tabelle nach SELLERID partitioniert und die einzelnen Partitionen nach QTY angeordnet (in aufsteigender Reihenfolge). Anschließend wird jeder Zeile eine Zeilennummer zugewiesen. Die Ergebnisse werden sortiert, nachdem die Fensterfunktionsergebnisse angewendet wurden.

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

Das folgende Beispiel zeigt die Ergebnisse, wenn die optionalen Klauseln nicht verwendet werden.

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