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 } ]
  )
Copy

Argumente

Keine.

Nutzungshinweise

  • Ausdruck expr1 und Ausdruck expr2 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 Ausdruck expr4 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|
+--------+------------------+------------+
Copy

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|
+------+--------+------+----------+
Copy