四分位数SQL实现

2021年2月22日 25点热度 0条评论 来源: 雨夹雪
/*
四分位数(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 

 

    原文作者:雨夹雪
    原文地址: https://blog.csdn.net/mxbing1984/article/details/113928186
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。