2

我试图弄清楚如何计算给定数据集的第 95 个百分位值。我可以使用下面的 T-SQL从数据集中获取第 95 个百分位值,但下面的代码总是给我数据集中的值

SELECT MIN(Value) 
FROM
(
    SELECT TOP 95 PERCENT WITH TIES Value
    FROM [Sample].[dbo].[numbers]
    ORDER BY Value DESC
) AS Temp

例如,对于数据集23, 5, 11, 22, 25, 14,每个 Excel 的第 95 个百分位值为 24.5,但 SQL Server 不会返回此值,因为它不在数据集中。

任何人都可以建议他们是否有任何建议?

提前感谢您的帮助。

4

1 回答 1

1

看起来您想要一个“内插”中位数。尤奇。但是,您可以使用 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 返回的值更有效。根据中位数和百分位数的定义,两者之间的任何值都同样有效,并且使用任何一个极端都有很好的论据。也就是说,我非常感谢在现实世界中,您可能必须这样做。

于 2013-10-29T22:46:52.687 回答