CUME_DIST
Возвращает накопленную долю: какая часть строк раздела стоит не позже текущей.
MySQL 8.1
CUME_DIST() OVER ([PARTITION BY ...] [ORDER BY ...])Параметры
- PARTITION BYнеобязательный
- Столбцы, по которым строки делятся на разделы, доля считается в каждом отдельно
- ORDER BYнеобязательный
- Порядок строк, по которому считается доля; без него у всех строк 1
Возвращаемое значение
Дробное число (DOUBLE) больше 0 и не больше 1
Примеры
CUME_DIST и PERCENT_RANK по статусу
MySQL 8.1
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.1
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 во внешнем запросе выбирает первую четверть строк.