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.
RANKFenster-Funktion
Die RANK Fensterfunktion bestimmt den Rang eines Werts in einer Gruppe von Werten auf der Grundlage des ORDER BY-Ausdrucks in der OVER Klausel. Wenn die optionale PARTITION BY-Klausel vorhanden ist, werden die Ranglisten für jede Zeilengruppe zurückgesetzt. Zeilen mit gleichen Werten in Bezug auf die Rangfestlegungskriterien erhalten den gleichen Rang. Amazon Redshift fügt die Anzahl der gleichwertigen Zeilen dem gleichwertigen Rang hinzu, um den nächsten Rang zu berechnen. Daher sind die Ränge möglicherweise nicht konsekutiv. Wenn beispielsweise zwei Zeilen den Rang 1 erhalten, ist der nächste Rang 3.
RANKunterscheidet sich DENSE_ RANK Fenster-Funktion in einer Hinsicht von der: Wenn für DENSE _ RANK zwei oder mehr Zeilen identisch sind, gibt es keine Lücke in der Reihenfolge der Rangwerte. Wenn beispielsweise zwei Zeilen den Rang 1 erhalten, ist der nächste Rang 2.
Sie können Rankingfunktionen mit unterschiedlichen PARTITION ORDER BY- und BY-Klauseln in derselben Abfrage haben.
Syntax
RANK () OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list ] )
Argumente
- ( )
-
Die Funktion verwendet keine Argumente. Es ist jedoch eine leere Klammer erforderlich.
- OVER
-
Die Fensterklauseln für die RANK Funktion.
- PARTITIONVON expr_list
-
Optional. Ein oder mehrere Ausdrücke, der/die das Fenster definiert/definieren.
- ORDERVON order_list
-
Optional. Definiert die Spalten, auf denen die Rangfestlegungswerte basieren. Wenn kein PARTITION BY angegeben ist, verwendet ORDER BY die gesamte Tabelle. Wenn ORDER BY weggelassen wird, ist der Rückgabewert für alle Zeilen 1.
Wenn ORDER BY keine eindeutige Reihenfolge ergibt, ist die Reihenfolge der Zeilen nicht deterministisch. Weitere Informationen finden Sie unter Spezifisches Anordnen von Daten für Fensterfunktionen.
Rückgabetyp
INTEGER
Beispiele
Im folgenden Beispiel wird die Tabelle nach der verkauften Menge (standardmäßig in aufsteigender Reihenfolge) geordnet und jeder Zeile einen Rang zugewiesen. Der Rangwert 1 ist der Wert mit dem höchsten Rang. Die Ergebnisse werden sortiert, nachdem die Fensterfunktionsergebnisse angewendet wurden:
select salesid, qty, rank() over (order by qty) as rnk from winsales order by 2,1; salesid | qty | rnk --------+-----+----- 10001 | 10 | 1 10006 | 10 | 1 30001 | 10 | 1 40005 | 10 | 1 30003 | 15 | 5 20001 | 20 | 6 20002 | 20 | 6 30004 | 20 | 6 10005 | 30 | 9 30007 | 30 | 9 40001 | 40 | 11 (11 rows)
Beachten Sie, dass die äußere ORDER BY-Klausel in diesem Beispiel die Spalten 2 und 1 enthält, um sicherzustellen, dass Amazon Redshift bei jeder Ausführung dieser Abfrage konsistent sortierte Ergebnisse zurückgibt. Zeilen mit den Umsätzen IDs 10001 und 10006 haben beispielsweise identische QTY Werte und. RNK Durch die Anordnung des endgültigen Ergebnissatzes nach Spalte 1 wird sichergestellt, dass die Zeile 10001 stets vor der Zeile 10006 angeordnet wird. Eine Beschreibung der WINSALES Tabelle finden Sie unter. Beispieltabelle mit Beispielen von Fensterfunktionen
Im folgenden Beispiel wird die Anordnung für die Fensterfunktion () umgekehrt. (order
by qty desc
). Jetzt gilt der höchste Rangwert für den größten QTY Wert.
select salesid, qty, rank() over (order by qty desc) as rank from winsales order by 2,1; salesid | qty | rank ---------+-----+----- 10001 | 10 | 8 10006 | 10 | 8 30001 | 10 | 8 40005 | 10 | 8 30003 | 15 | 7 20001 | 20 | 4 20002 | 20 | 4 30004 | 20 | 4 10005 | 30 | 2 30007 | 30 | 2 40001 | 40 | 1 (11 rows)
Eine Beschreibung der WINSALES Tabelle finden Sie unterBeispieltabelle mit Beispielen von Fensterfunktionen.
Das folgende Beispiel partitioniert die Tabelle nach SELLERID und ordnet jede Partition nach der Menge (in absteigender Reihenfolge) und weist jeder Zeile einen Rang zu. Die Ergebnisse werden sortiert, nachdem die Fensterfunktionsergebnisse angewendet wurden.
select salesid, sellerid, qty, rank() over (partition by sellerid order by qty desc) as rank from winsales order by 2,3,1; salesid | sellerid | qty | rank --------+----------+-----+----- 10001 | 1 | 10 | 2 10006 | 1 | 10 | 2 10005 | 1 | 30 | 1 20001 | 2 | 20 | 1 20002 | 2 | 20 | 1 30001 | 3 | 10 | 4 30003 | 3 | 15 | 3 30004 | 3 | 20 | 2 30007 | 3 | 30 | 1 40005 | 4 | 10 | 2 40001 | 4 | 40 | 1 (11 rows)