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

PERCENT_RANK

Возвращает относительный ранг строки в разделе окна — долю строк, которые стоят перед ней, от 0 до 1.

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

Параметры

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

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

Дробное число (double precision) от 0 до 1

Примеры

Относительный ранг по дате рождения

PostgreSQL 17.5
SELECT member_name,
	birthday,
	PERCENT_RANK() OVER (
		ORDER BY birthday
	) AS pct_rank
FROM FamilyMembers;
member_namebirthdaypct_rank
Headley Quincey1960-05-130
Ernest Forrest1961-09-110.14285714285714285
Flavia Quincey1963-02-160.2857142857142857
Constance Forrest1968-09-060.42857142857142855
Andie Quincey1983-06-050.5714285714285714
Lela Quincey1985-06-070.7142857142857143
Annie Quincey1988-04-100.8571428571428571
Wednesday Addams2005-01-131

RANK и PERCENT_RANK для цен

PostgreSQL 17.5
SELECT unit_price,
	RANK() OVER (
		ORDER BY unit_price
	) AS price_rank,
	ROUND(
		PERCENT_RANK() OVER (
			ORDER BY unit_price
		)::numeric,
		2
	) AS pct_rank
FROM Payments
ORDER BY unit_price;
unit_priceprice_rankpct_rank
710.00
710.00
830.07
830.07
830.07
1060.19
1670.22
2080.26
5990.30
100100.33

Подробности

Считается как (RANK − 1) / (число строк раздела − 1). Одинаковые значения получают одинаковый ранг. У раздела из одной строки результат 0.

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