Справочник по функциям

RANK

Возвращает ранг строки в разделе окна — её место по порядку ORDER BY.

PostgreSQL 17.5
RANK() OVER ([PARTITION BY ...] [ORDER BY ...])

Параметры

PARTITION BYнеобязательный
Столбцы, по которым строки делятся на разделы, ранги считаются в каждом отдельно
ORDER BYнеобязательный
Порядок строк, по которому определяется место

Возвращаемое значение

Целое число (bigint) — место строки; одинаковые значения делят место, следующие места пропускаются: 1, 2, 2, 4

Примеры

Ранг по статусу с пропусками

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

Места по цене у каждого члена семьи

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

Подробности

Без ORDER BY все строки раздела получают ранг 1. В WHERE оконные функции не работают, поэтому, чтобы отобрать первые места, ранг считают в подзапросе и фильтруют во внешнем запросе.

Смотрите также

Где изучить