CUME_DIST
Возвращает накопленную долю: какая часть строк раздела стоит не позже текущей.
MySQL 8.4
CUME_DIST()Возвращаемое значение
Дробное число (DOUBLE) больше 0 и не больше 1
Примеры
CUME_DIST и PERCENT_RANK по статусу
MySQL 8.4
SELECT member_name,
status,
CUME_DIST() OVER (
ORDER BY status
) AS status_cume_dist,
PERCENT_RANK() OVER (
ORDER BY status
) AS status_percent_rank
FROM FamilyMembers;Самая дешёвая четверть товаров
MySQL 8.4
SELECT name,
price
FROM (
SELECT name,
price,
CUME_DIST() OVER (
ORDER BY price
) AS share_cheaper_or_equal
FROM products
) AS t
WHERE share_cheaper_or_equal <= 0.25;Подробности
Значение — число строк со значением ORDER BY не больше текущего, делённое на число строк в разделе. В отличие от PERCENT_RANK, текущая строка и равные ей тоже входят в долю, поэтому результат никогда не равен 0, а у последней строки равен 1. Условие CUME_DIST() <= 0.25 во внешнем запросе выбирает первую четверть строк. Без ORDER BY у всех строк раздела результат 1.