SQL Academy
Premium
Funktionsreferenz

DENSE_RANK

Gibt den Rang einer Zeile in der Fensterpartition zurück, wie RANK, aber ohne Lücken zwischen den Plätzen.

PostgreSQL 17.5
DENSE_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, der nächste Platz ist um eins größer: 1, 2, 2, 3

Beispiele

DENSE_RANK und RANK nach Status

PostgreSQL 17.5
SELECT member_name,
	status,
	RANK() OVER (
		ORDER BY status
	) AS status_rank,
	DENSE_RANK() OVER (
		ORDER BY status
	) AS status_dense_rank
FROM FamilyMembers;
member_namestatusstatus_rankstatus_dense_rank
Wednesday Addamsdaughter11
Lela Quinceydaughter11
Annie Quinceydaughter11
Headley Quinceyfather42
Ernest Forrestfather42
Constance Forrestmother63
Flavia Quinceymother63
Andie Quinceyson84

Drei höchste Preise

PostgreSQL 17.5
SELECT good,
	unit_price,
	price_rank
FROM (
		SELECT good,
			unit_price,
			DENSE_RANK() OVER (
				ORDER BY unit_price DESC
			) AS price_rank
		FROM Payments
	) AS ranked
WHERE price_rank <= 3;
goodunit_priceprice_rank
14660001
11100002
1655003

Details

Die Funktion eignet sich, um die N größten Werte samt Gleichständen auszuwählen: Gleiche Werte teilen sich einen Platz, und die folgenden Plätze werden nicht übersprungen. Nach dem Rang filterst du in der äußeren Abfrage, denn Fensterfunktionen funktionieren nicht in WHERE.

Siehe auch

Wo du es lernst