四分位数SQL实现

/*
四分位数(Quartile),即统计学中,把所有数值由小到大排列并分成四等份,处于三个分割点位置的得分就是四分位数
第一四分位数 (Q1),又称'较小四分位数',等于该样本中所有数值由小到大排列后第25%的数字
第二四分位数 (Q2),又称'中位数',等于该样本中所有数值由小到大排列后第50%的数字
第三四分位数 (Q3),又称'较大四分位数',等于该样本中所有数值由小到大排列后第75%的数字
第三四分位数与第一四分位数的差距又称四分位距(InterQuartile Range,IQR)

1:将数据从小到大排序,计为数组a(1 to n),n代表数据的长度
2:确定四分位数的位置b,b的整数部分计为c,b的小数部分计为d
   Q1的位置 b = (n+1) * 0.25
   Q2的位置 b = (n+1) * 0.5
   Q3的位置 b = (n+1) * 0.75
 另外一种方法基于n-1 基础.即
   Q1的位置 b = (n-1) * 0.25
   Q2的位置 b = (n-1) * 0.5
   Q3的位置 b = (n-1) * 0.75
 Excel中有两个四分位数的函数QUARTILE.EXC 和QUARTILE.INC
 QUATILE.EXC 基于n+1 的方法,QUARTILE.INC基于n-1的方法
3:计算
   Q1=a(c)+[a(c+1)-a(c)]*d,Q2与Q3的求法类似 
*/
--SQL实现   
SELECT shopcode,quarter,a+(b-a)*c AS QUARTILE
FROM 
(
	SELECT shopcode,quartername,
	MAX(CASE WHEN id = FLOOR(r) THEN pforce ELSE NULL END) AS a,
	MAX(CASE WHEN id = FLOOR(r)+1 THEN pforce ELSE NULL END) AS b,
	MAX(r-FLOOR(r)) AS c  
	FROM 
	(
		SELECT *,
		ROW_NUMBER() OVER(PARTITION BY shopcode,quartername ORDER BY pforce) AS id,
		(1+COUNT(1) OVER(PARTITION BY shopcode,quartername)) * 0.75 AS r 
		FROM ttt 
	)
	A   GROUP BY shopcode,quartername
) B 

 

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值