我试图弄清楚如何计算给定数据集的第95百分位值。我可以使用下面的T-SQL从数据集中获取第95百分位值 ,但下面的代码总是从>>数据集中获得值。 / p>
例如,对于数据集 23,5,11,22,25,14 ,第95百分位数值为每个Excel 24.5,但SQL Server不会将此值返回为它不在数据集中。 有人可以建议他们是否有任何建议? 提前感谢您的帮助。SELECT MIN(Value)
FROM
(
SELECT TOP 95 PERCENT WITH TIES Value
FROM [Sample].[dbo].[numbers]
ORDER BY Value DESC
) AS Temp
答案 0 :(得分:1)
看起来你想要一个“插值”中位数。 Yucch。但是,您可以使用SQL执行此操作。只需明确计算:
select (max(case when rownum <= 0.95 * total then value end) +
min(case when rownum >= 0.95 * total then value end)
) / 2.0 as Interpolated_95th
from (SELECT n.*, row_number() over (order by value) as rownum,
count(*) over () as total
FROM [Sample].[dbo].[numbers] n
) t
请注意,这适用于正好有20行的倍数(因此第95个百分位位于19x位置),因为相等 - min()
和max()
将是相同。如果在其他情况下也有效,则始终将这两个值中间的点返回。
注意:我并不认为这比SQL返回的值更有效。通过中位数和百分位数的定义,两者之间的任何值都同样有效,并且使用任一极值都有一个很好的论据。也就是说,我可以非常感谢在现实世界中,你可能必须这样做。