我正在使用NTILE(100)
来计算我的专栏中的第95百分位值。在某些记录数小于100的情况下,NTILE(100)
在查询第95个四分位数中的值时返回NULL,因为没有足够的值。我现在正以下列方式这样做:
CREATE TABLE #Temp(val int)
GO
INSERT INTO #Temp(val) VALUES(1);
INSERT INTO #Temp(val) VALUES(2);
INSERT INTO #Temp(val) VALUES(3);
INSERT INTO #Temp(val) VALUES(4);
INSERT INTO #Temp(val) VALUES(5);
INSERT INTO #Temp(val) VALUES(6);
SELECT val, Quantile
FROM
(
SELECT val, NTILE(100) OVER (ORDER BY val) AS Quantile
FROM
#Temp
) A
WHERE Quantile=95
GO
DROP TABLE #Temp
我想知道处理列中少于100个值的案例的可接受标准是什么。有什么建议吗?
答案 0 :(得分:0)
我正在寻找一个仍然在SQL Server 2005上的客户端项目的解决方案。由于NTILE只是将可用行划分为组,所以你永远不会高于6行6行。如果你想把它们展开看起来像百分位数(例如:16,33,50,66,83,100) 你可以做到以下几点。请注意,您不必完全命中95,因此您需要查询最接近的值:
SELECT TOP 1 val, Quantile
FROM
(
SELECT val, CAST (ROW_NUMBER() OVER (ORDER BY val) * 100.0 / COUNT(*) OVER() AS INT) AS Quantile
FROM #Temp
) A
WHERE Quantile >= 95
ORDER BY Quantile