RANK
Gibt den Rang einer Zeile in der Fensterpartition zurück, also ihren Platz in der Reihenfolge von ORDER BY.
PostgreSQL 17.5
RANK() OVER ([PARTITION BY ...] [ORDER BY ...])Parameter
- PARTITION BYoptional
- Spalten, nach denen die Zeilen in Partitionen aufgeteilt werden; die Ränge werden in jeder separat berechnet
- ORDER BYoptional
- Reihenfolge der Zeilen, die den Platz bestimmt
Rückgabewert
Ganze Zahl (bigint), der Platz der Zeile; gleiche Werte teilen sich einen Platz, die folgenden Plätze werden übersprungen: 1, 2, 2, 4
Beispiele
Rang nach Status mit Lücken
PostgreSQL 17.5
SELECT member_name,
status,
RANK() OVER (
ORDER BY status
) AS status_rank
FROM FamilyMembers;Preisplätze je Familienmitglied
PostgreSQL 17.5
SELECT family_member,
unit_price,
RANK() OVER (
PARTITION BY family_member
ORDER BY unit_price DESC
) AS price_rank
FROM Payments
ORDER BY family_member,
price_rank;Details
Ohne ORDER BY bekommt jede Zeile der Partition den Rang 1. Fensterfunktionen funktionieren nicht in WHERE: Um die ersten Plätze auszuwählen, berechnest du den Rang in einer Unterabfrage und filterst in der äußeren Abfrage.