MySQL窗口函数—分布函数- CUME_DIST和PERCENT_RANK

举报
王小王-123 发表于 2022/03/23 23:23:23 2022/03/23
【摘要】 CUME_DIST() 用途:分组内小于、等于当前rank值的行数 / 分组内总行数 应用场景:查询小于等于当前薪资(salary)的比例 select dname, ename, salary, cume_dist() over(order by salary) as rn1, -- 没有partition语句 所有的数据位...

CUME_DIST()

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

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


  
  1. select
  2. dname,
  3. ename,
  4. salary,
  5. cume_dist() over(order by salary) as rn1, -- 没有partition语句 所有的数据位于一组
  6. cume_dist() over(partition by dname order by salary) as rn2
  7. from employee;


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

PERCENT_RANK

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

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


  
  1. select
  2. dname,
  3. ename,
  4. salary,
  5. rank() over(partition by dname order by salary desc ) as rn,
  6. percent_rank() over(partition by dname order by salary desc ) as rn2
  7. from employee;

  
  1. /*
  2. rn2:
  3. 第一行: (1 - 1) / (6 - 1) = 0
  4. 第二行: (1 - 1) / (6 - 1) = 0
  5. 第三行: (3 - 1) / (6 - 1) = 0.4
  6. */

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

每文一语

加油!

文章来源: wxw-123.blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。

原文链接:wxw-123.blog.csdn.net/article/details/123552627

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。