PERCENT_RANK
Возвращает относительный ранг строки в разделе окна — долю строк, которые стоят раньше неё.
MySQL 8.1
PERCENT_RANK() OVER ([PARTITION BY ...] [ORDER BY ...])Параметры
- PARTITION BYнеобязательный
- Столбцы, по которым строки делятся на разделы, доля считается в каждом отдельно
- ORDER BYнеобязательный
- Порядок строк, по которому определяется место; без него у всех строк 0
Возвращаемое значение
Дробное число (DOUBLE) от 0 до 1
Примеры
Доля по дате рождения
MySQL 8.1
SELECT member_name,
birthday,
RANK() OVER (
ORDER BY birthday
) AS birthday_rank,
PERCENT_RANK() OVER (
ORDER BY birthday
) AS birthday_percent_rank
FROM FamilyMembers;Положение зарплаты в отделе
MySQL 8.1
SELECT department_id,
name,
salary,
ROUND(
PERCENT_RANK() OVER (
PARTITION BY department_id
ORDER BY salary
),
2
) AS salary_percent_rank
FROM employees;Подробности
Значение считается по формуле (RANK() - 1) / (число строк в разделе - 1): у первой строки 0, у последней 1. Строки с одинаковыми значениями ORDER BY получают одну долю, как одно место у RANK. В разделе из одной строки результат 0.