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;Места по цене у каждого члена семьи
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;Подробности
Без ORDER BY все строки раздела получают ранг 1. В WHERE оконные функции не работают, поэтому, чтобы отобрать первые места, ранг считают в подзапросе и фильтруют во внешнем запросе.