CUME_DIST()

用途:分组内小于、等于当前rank值的行数 / 分组内总行数

应用场景:查询小于等于当前薪资(salary)的比例

select  
dname,
ename,
salary,
cume_dist() over(order by salary) as rn1, -- 没有partition语句 所有的数据位于一组
cume_dist() over(partition by dname order by salary) as rn2
from employee;

MySQL窗口函数—分布函数- CUME_DIST和PERCENT_RANK_数据库

/*
rn1: 没有partition,所有数据均为1组,总行数为12,
第一行:小于等于3000的行数为3,因此,3/12=0.25
第二行:小于等于4000的行数为5,因此,5/12=0.4166666666666667
rn2: 按照部门分组,dname='研发部'的行数为6,
第一行:研发部小于等于3000的行数为1,因此,1/6=0.16666666666666666
*/

PERCENT_RANK

用途:每行按照公式(rank-1) / (rows-1)进行计算。

其中,rank为RANK()函数产生的序号,rows为当前窗口的记录总行数
应用场景:不常用

select 
dname,
ename,
salary,
rank() over(partition by dname order by salary desc ) as rn,
percent_rank() over(partition by dname order by salary desc ) as rn2
from employee;
/*
rn2:
第一行: (1 - 1) / (6 - 1) = 0
第二行: (1 - 1) / (6 - 1) = 0
第三行: (3 - 1) / (6 - 1) = 0.4
*/

MySQL窗口函数—分布函数- CUME_DIST和PERCENT_RANK_分布函数_02

这个应用场景还是不是很多,按照排名直接进行计算,其实可以转为为前面比你大的还有多少人

每文一语

加油!