CUME_DIST
Возвращает долю строк раздела окна, которые стоят перед текущей строкой или вместе с ней, от 0 до 1.
PostgreSQL 17.5
CUME_DIST() OVER ([PARTITION BY ...] [ORDER BY ...])Параметры
- PARTITION BYнеобязательный
- Столбцы, по которым строки делятся на разделы, доли считаются в каждом отдельно
- ORDER BYнеобязательный
- Порядок строк, по которому считается доля
Возвращаемое значение
Дробное число (double precision) больше 0 и не больше 1
Примеры
PERCENT_RANK и CUME_DIST
PostgreSQL 17.5
SELECT unit_price,
ROUND(
PERCENT_RANK() OVER (
ORDER BY unit_price
)::numeric,
3
) AS pct_rank,
ROUND(
CUME_DIST() OVER (
ORDER BY unit_price
)::numeric,
3
) AS cume_dist
FROM Payments
ORDER BY unit_price;Доля платежей не дороже текущего
PostgreSQL 17.5
SELECT family_member,
unit_price,
ROUND(
CUME_DIST() OVER (
PARTITION BY family_member
ORDER BY unit_price
)::numeric,
2
) AS share_not_more
FROM Payments
ORDER BY family_member,
unit_price;Подробности
Считается как число строк со значением ORDER BY не больше текущего, делённое на число строк раздела. В отличие от PERCENT_RANK, результат никогда не равен 0, а у последней строки всегда равен 1.