SQL SERVER中CUME_DIST和PERCENT_RANK函数
2014-03-12 01:22
225 查看
SQL SERVER中CUME_DIST和PERCENT_RANK函数
CUME_DIST和PERCENT_RANK函数
CUME_DIST,计算某个值在 SQL Server 2012 中的一组值内的累积分布。也即,CUME_DIST 计算某指定值在一组值中的相对位置。对于行r,假定采用升序,r 的CUME_DIST 是值低于或等于r 的值的行数除以在分区或查询结果集中求出的行数。
CUME_DIST 返回的值范围大于 0 并小于或等于 1。 关联值始终计算为相同的累积分布值。默认情况下包含 NULL 值,且该值被视为最低的可能值。
PERCENT_RANK,计算 SQL Server 2012 中一组行内某行的相对排名。 使用 PERCENT_RANK 计算一个值在查询结果集或分区中的相对位置。
PERCENT_RANK 返回的值范围大于 0 并小于或等于 1。 任何一组中第一行的 PERCENT_RANK 都为 0。默认情况下包含 NULL 值,且该值被视为最低的可能值。
看一组SQL语句:
WITH test
as
(
select NULL as score
UNION ALL
select NULL
UNION ALL
select 10
UNION ALL
select 40
UNION ALL
select 40
UNION ALL
select 50
UNION ALL
select 50
UNION ALL
select 60
UNION ALL
select 90
UNION ALL
select 90
)
select ROW_NUMBER() over(order by score) as rownum
,score,cume_dist()over(order by score) as cum
,PERCENT_RANK() over(order by score) as per_rnk
,RANK() over(order by score) as rnk
from test
把一组数据放进CTE临时表进行CUME_DIST和PERCENT_RANK计算,结果:
rownum score cum per_rnk rnk
1 NULL 0.2 0 1
2 NULL 0.2 0 1
3 10 0.3 0.222222222222222 3
4 40 0.5 0.333333333333333 4
5 40 0.5 0.333333333333333 4
6 50 0.7 0.555555555555556 6
7 50 0.7 0.555555555555556 6
8 60 0.8 0.777777777777778 8
9 90 1 0.888888888888889 9
10 90 1 0.888888888888889 9
首先,NULL都会被当作最小值。
cume_dist的计算方法:小于等于当前行值的行数/总行数。
比如,第3行值为10,有3行的值小于等于10,总行数10行,因此CUME_DIST为3/10=0.3 。
再比如,第4行值为40,行值小于等于40的共5行,总行数10行,因此CUME_DIST为5/10=0.5 。
PERCENT_RANK的计算方法:当前RANK值-1/总行数-1 。
比如,第4行的RANK值为4,总行数10行,因此PERCENT_RANK为4-1/10-1= 0.333333333333333。
再比如,第7行的RANK值为6,总行数10行,因此PERCENT_RANK为6-1/10-1=0.555555555555556。
相关文章推荐
- mac mariadb编译后无法启动
- SQLite优化方法
- sql带分隔符的截取字符串示例
- mysql的udf编程之非阻塞超时重传
- MongoDB的创始人:项目经理30%的时间应该用在编程上
- oracle 误删数据
- TIMESTAMP with ****问题连不上mysql
- Oracle之分页查询
- mysql null 空值 有值
- SQL Server数据库无法启动(万金油解决办法)
- 腾讯云的云数据库MYSQL配置
- 基本的数据库增删改查
- oracle asm 磁盘头数据以及备份与恢复基础篇(二)
- dede数据库文件导入失败的可能原因是数据表前缀不同,这里的失败指的是mysql添加了数据,但后台不显示
- SQL汇总查询得到的数据
- Oracle 服务手动启动关闭
- Could not connect: Can't connect to MySQL server on 'MYSQL.SERVER' (13)
- 学生表/教师表/课程表/成绩表常见SQL查询
- NoSQL学习笔记(二)之CAP理论
- 使用类定义mysql语句函数