我正在尝试根据可以是任意长度的数字数组来计算四分位数范围,例如
1, 1, 5, 6, 7, 8, 2, 4, 7, 9, 9, 9, 9
我需要从这个四分位数范围中计算出的值是:
- 上四分位数
- 中位数
- 下四分位
如果我将上面的数字数组转储到 Microsoft Excel(A:M 列)中,那么我可以使用以下公式:
=QUARTILE.INC(A1:M1,1)
=QUARTILE.INC(A1:M1,2)
=QUARTILE.INC(A1:M1,3)
要得到我的答案:
- 4
- 7
- 9
我现在需要在 SQL Server 或 VB.NET 中计算出这 3 个值。我可以使用这些语言中的任何一种获取任何格式或对象的数组值,但我找不到任何存在的函数,例如 Excel 具有的 QUARTILE.INC
函数。
有谁知道如何在 SQL Server 或 VB.NET 中实现这一点?
最佳答案
可能有更简单的方法,但要获得四分位数,您可以使用 NTILE (Transact-SQL)
Distributes the rows in an ordered partition into a specified number of groups. The groups are numbered, starting at one. For each row, NTILE returns the number of the group to which the row belongs.
对于您的数据:
SELECT 1 Val
INTO #temp
UNION ALL
SELECT 1
UNION ALL
SELECT 5
UNION ALL
SELECT 6
UNION ALL
SELECT 7
UNION ALL
SELECT 8
UNION ALL
SELECT 2
UNION ALL
SELECT 4
UNION ALL
SELECT 7
UNION ALL
SELECT 9
UNION ALL
SELECT 9
UNION ALL
SELECT 9
UNION ALL
SELECT 9
-- NTILE(4) specifies you require 4 partitions (quartiles)
SELECT NTILE(4) OVER ( ORDER BY Val ) AS Quartile ,
Val
INTO #tempQuartiles
FROM #temp
SELECT *
FROM #tempQuartiles
DROP TABLE #temp
DROP TABLE #tempQuartiles
这会产生:
Quartile Val
1 1
1 1
1 2
1 4
2 5
2 6
2 7
3 7
3 8
3 9
4 9
4 9
4 9
从中你可以弄清楚你想要什么。
因此修改 SELECT
你可以这样做:
SELECT Quartile, MAX(Val) MaxVal
FROM #tempQuartiles
WHERE Quartile <= 3
GROUP BY Quartile
生产:
Quartile MaxVal
1 4
2 7
3 9
关于sql-server - 四分位数范围 - 下限、上限和中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29945796/