Postgres-Rang

Postgres Rang



In PostgreSQL ist die rank()-Funktion eine Fensterfunktion, die es uns ermöglicht, jeder Zeile innerhalb einer Ergebnismenge basierend auf einem bestimmten Sortierkriterium einen Rang zuzuweisen. Wie die meisten Fensterfunktionen ist die Rangfunktion bei analytischen Abfragen hilfreich, beispielsweise bei der Bestimmung des Rangs einer Zeile im Verhältnis zu anderen Zeilen in einem bestimmten Ergebnissatz.

In diesem Tutorial erfahren Sie, wie Sie mit den PostgreSQL-Funktionen arbeiten. Wir untersuchen auch die Funktionssyntax und Parameter und schauen uns einige praktische Beispiele an.

PostgreSQL Rank()-Funktion

Das Folgende zeigt die Syntax der Funktion rank() in PostgreSQL:







RANK() OVER (PARTITION BY partition_expression ORDER BY sort_expression [ASC|DESC])

Wir beginnen mit dem Aufruf der Funktion rank(). Anschließend verwenden wir das Schlüsselwort OVER, um anzugeben, dass wir eine Fensterfunktionsoperation ausführen möchten.



Als nächstes kommt der PARTITION BY-Partitionsausdruck. Diese Klausel unterteilt die Zeilen basierend auf einem bestimmten Ausdruck in verschiedene Partitionen. Die Rangfolge erfolgt unabhängig in jeder Partition, wobei der ganzzahlige Rangwert für jede neue Partition bei 1 beginnt.



Schließlich haben wir die ORDER BY-Klausel, die die Spalte oder den Ausdruck angibt, der die Zeilenreihenfolge bestimmt.





Beispiel für eine PostgreSQL-Rank()-Funktion

Die folgende Abfrage zeigt ein einfaches Beispiel für die Verwendung der rank()-Funktion von PostgreSQL:

SELECT-Wert, RANK() OVER (ORDER BY-Wert) AS-Rang
AUS (
WERTE (10), (20), (5), (15), (10)
) AS-Daten (Wert);

In diesem Beispiel ordnen wir die Werte nach ihrer aufsteigenden Reihenfolge. Den beiden Vorkommen des Wertes wird der gleiche Rang zugewiesen, da sie ähnlich sind und in der Reihenfolge an der gleichen Position erscheinen.



Die resultierende Tabelle sieht wie folgt aus:

SELECT-Wert, RANK() OVER (PARTITION BY-Wert % 2 ORDER BY-Wert) AS-Rang
AUS (
WERTE (10), (20), (5), (15), (10)
) AS-Daten (Wert);

Beispiel einer PostgreSQL-Rank()-Funktion mit der Partition By-Klausel

Betrachten Sie das folgende Beispiel:

SELECT-Wert, RANK() OVER (PARTITION BY-Wert % 2 ORDER BY-Wert) AS-Rang
AUS (
WERTE (10), (20), (5), (15), (10)
) AS-Daten (Wert);

In diesem Beispiel haben wir die PARTITION BY-Klausel mit einem Ausdruck hinzugefügt, der prüft, ob der Wert eine gerade oder ungerade Zahl ist. Dadurch sollten die Werte effektiv in zwei Partitionen gruppiert werden: eine für gerade Zahlen (wobei der Rest 0 ist) und die andere für ungerade Zahlen (wobei der Rest 1 ist).

Die resultierende Menge ist wie folgt:

Beispiel einer PostgreSQL-Rank()-Funktion durch Kombination mehrerer SQL-Funktionen

Mit der Funktion rank() können Sie auch komplexere Abfragen erstellen. Nehmen Sie zum Beispiel die Pagila-Datenbank. Angenommen, wir möchten die fünf besten Kunden basierend auf ihren gesamten Mietzahlungen ermitteln und ihnen Ränge zuweisen.

Wir können die Funktion rank() wie in der folgenden Abfrage gezeigt verwenden:

SELECT Kunden-ID, Vorname, Nachname, Gesamtzahlungen,
RANK() OVER (ORDER BY total_zahlungen DESC) AS-Rang
AUS (
SELECT c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_zahlungen
VON Kunde c
JOIN payment p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
) AS customer_zahlungen
ORDER NACH Rang
LIMIT 10;

In diesem Beispiel wählen wir die Kunden-ID, den Vornamen, den Nachnamen, die Gesamtzahlung und den zugewiesenen Rang() aus. Dann verwenden wir die Funktion rank(), um jedem Kunden einen Rang zuzuweisen, basierend auf der Gesamtzahlung, die in absteigender Reihenfolge sortiert wird.

Mit der inneren Unterabfrage können wir die Gesamtzahlungen für jeden Kunden berechnen, indem wir die Kunden- und Zahlungstabellen zusammenführen. Anschließend gruppieren wir das Ergebnis anhand der Spalten „customer_id“, „first_name“ und „last_name“, um die Summe der Zahlungen für jeden Kunden abzurufen.

Schließlich wenden wir in der äußeren Abfrage die Funktion rank() auf die Ergebnismenge an und ordnen sie nach total_zahlungen in aufsteigender Reihenfolge. Wir fügen auch die Limit-Klausel ein, um nur die obersten 10 Zeilen abzurufen.

Wie Sie sehen, können Sie aussagekräftigere Daten generieren, indem Sie mehrere SQL-Funktionen wie Sortieren, Filtern, Aggregationen, Verknüpfungen und mehr kombinieren.

Abschluss

Wir haben untersucht, wie wir mit der Funktion rank() in PostgreSQL arbeiten können, um den Rang einer bestimmten Zeile aus einer Ergebnismenge basierend auf den definierten Bedingungen abzurufen. Wir haben auch erläutert, wie Sie die Funktion rank() mit anderen SQL-Tools kombinieren können, um komplexere Abfragen zu erstellen.