- Kategorien:
Fensterfunktionen (Rangbezogen)
ROW_NUMBER¶
Gibt für jede Zeile in einer Fensterpartition eine eindeutige Zeilennummer zurück.
Die Zeilennummer beginnt bei 1 und setzt sich der Reihe nach fort.
Syntax¶
ROW_NUMBER() OVER (
[ PARTITION BY <expr1> [, <expr2> ... ] ]
ORDER BY <expr3> [ , <expr4> ... ] [ { ASC | DESC } ]
)
Argumente¶
Keine.
Nutzungshinweise¶
Ausdruck
expr1
und Ausdruckexpr2
geben die Spalten oder Ausdrücke an, nach denen partitioniert werden soll. Sie können mit 0, 1 oder mehr Ausdrücken partitionieren.Angenommen, Sie wählen Daten für mehrere Bundesstaaten (oder Provinzen) aus und möchten in jedem Bundesstaat Zeilennummern von 1 bis N verwenden. In diesem Fall können Sie nach dem Bundesstaat partitionieren.
Wenn Sie nur eine einzige Gruppe wünschen, lassen Sie die
PARTITION BY
-Klausel weg.Ausdruck
expr3
und Ausdruckexpr4
geben die Spalten oder Ausdrücke an, die zum Bestimmen der Reihenfolge der Zeilen verwendet werden. Sie können nach einem oder mehreren Ausdrücken sortieren.Wenn Sie beispielsweise Landwirte anhand ihrer Maisproduktion sortieren möchten, verwenden Sie die Spalte
bushels_produced
. Weitere Details dazu finden Sie unter Beispiele (unter diesem Thema).
Beispiele¶
Anzeigen von Landwirten in absteigender Reihenfolge nach erzeugter Maismenge und Zuweisen von Zeilennummern in dieser Reihenfolge (der Landwirt, der am meisten Mais produziert, hat die Zeilennummer 1).
SELECT state, bushels_produced, ROW_NUMBER() OVER (ORDER BY bushels_produced DESC) FROM corn_production; +--------+------------------+------------+ | state | bushels_produced | ROW_NUMBER | +--------+------------------+------------+ | Kansas | 130 | 1| | Kansas | 120 | 2| | Iowa | 110 | 3| | Iowa | 100 | 4| +--------+------------------+------------+
Die folgende Abfrage veranschaulicht, wie Zeilennummern in Partitionen zugewiesen werden. In diesem Fall sind die Partitionen Aktienbörsen (z. B. „N“ für „NASDAQ“).
SELECT
symbol,
exchange,
shares,
ROW_NUMBER() OVER (PARTITION BY exchange ORDER BY shares) AS row_number
FROM trades;
+------+--------+------+----------+
|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|
+------+--------+------+----------+