Referencia de funciones

DENSE_RANK

Devuelve el rango de una fila en la partición de la ventana, como RANK, pero sin huecos entre los puestos.

PostgreSQL 17.9
DENSE_RANK()

Valor devuelto

Número entero (bigint), el puesto de la fila; los valores iguales comparten puesto y el siguiente es una unidad mayor: 1, 2, 2, 3

Ejemplos

DENSE_RANK y RANK por estado

PostgreSQL 17.9
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

Los tres precios más altos

PostgreSQL 17.9
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

Detalles

La función sirve para elegir los N valores más grandes incluidos los empates: los valores iguales comparten puesto y los siguientes puestos no se saltan. Filtra por el rango en la consulta externa, porque las funciones de ventana no funcionan en WHERE.

Véase también

Dónde aprenderlo