Sql 计算第95百分位值,但不一定来自数据集

Sql 计算第95百分位值,但不一定来自数据集,sql,tsql,sql-server-2008-r2,statistics,Sql,Tsql,Sql Server 2008 R2,Statistics,我试图找出如何计算给定数据集的第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

我试图找出如何计算给定数据集的第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不会返回此值,因为它不在数据集中

SELECT MIN(Value) 
FROM
(
    SELECT TOP 95 PERCENT WITH TIES Value
    FROM [Sample].[dbo].[numbers]
    ORDER BY Value DESC
) AS Temp
谁能告诉我他们有什么建议吗


提前感谢您的帮助。

看起来您需要插值中值。是的。但是,您可以使用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返回的值更有效。根据中位数和百分位数的定义,两者之间的任何值都是同等有效的,使用两个极端都有很好的理由。也就是说,我非常理解在现实世界中,你可能必须这样做。

有不止一种类型的百分位数,所以你必须知道你想要哪一种。单独使用sql可能是不可能的。当我不得不这样做时,我从sql中获取记录,并用ColdFusion计算百分位数。@sgeddes。它正在对分布作出激进的假设。我认为正确答案是25,这是SQL应该返回的值。Excel中进行插值的可能原因是在行数为偶数时处理中间值。即使如此,两个中间值之间的所有数字都是同样有效的,因此中间的任何值,甚至任何一个端点都有一个论点。这可能会有所帮助:谢谢你的帮助。如果行数不是20的倍数,请确认上述逻辑是否不起作用?再次感谢/@sam1980。上面的代码用于插值值,而不考虑值的数量。