SQL Academy
Premium
Funktionsreferenz

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;
member_namestatusstatus_rank
Wednesday Addamsdaughter1
Lela Quinceydaughter1
Annie Quinceydaughter1
Headley Quinceyfather4
Ernest Forrestfather4
Constance Forrestmother6
Flavia Quinceymother6
Andie Quinceyson8

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;
family_memberunit_priceprice_rank
1100001
120002
13003
1104
185
185
177
177
2660001
255002

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.

Siehe auch

Wo du es lernst