ca8*_*msm 6 vb.net sql-server excel
我正在尝试根据可以是任意长度的数字数组来计算四分位数范围
1, 1, 5, 6, 7, 8, 2, 4, 7, 9, 9, 9, 9
Run Code Online (Sandbox Code Playgroud)
我需要从这个四分位数范围得出的值是:
如果我将上述数字数组转储到Microsoft Excel(列A:M)中,则可以使用以下公式:
=QUARTILE.INC(A1:M1,1)=QUARTILE.INC(A1:M1,2)=QUARTILE.INC(A1:M1,3)得到我的答案:
我现在需要在SQL Server或VB.NET中计算这3个值。我可以使用任何一种语言的任何格式或对象来获取数组值,但是找不到像QUARTILE.INCExcel所具有的函数那样存在的任何函数。
有谁知道如何在SQL Server或VB.NET中实现此目标?
可能有更简单的方法,但要获得四分位数,您可以使用NTILE (Transact-SQL)
将有序分区中的行分布到指定数量的组中。这些组从一开始编号。对于每一行,NTILE 返回该行所属组的编号。
所以对于你的数据:
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
Run Code Online (Sandbox Code Playgroud)
这将产生:
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
Run Code Online (Sandbox Code Playgroud)
从中你可以找出你所追求的。
所以修改SELECT你可以这样做:
SELECT Quartile, MAX(Val) MaxVal
FROM #tempQuartiles
WHERE Quartile <= 3
GROUP BY Quartile
Run Code Online (Sandbox Code Playgroud)
生产:
Quartile MaxVal
1 4
2 7
3 9
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14353 次 |
| 最近记录: |