手动计算第 90 个百分位与函数不会产生相同的结果,为什么?

问题描述 投票:0回答:1

所以,我最初并不知道有一个

percentile_cont
函数,我试图通过查找 z 分数 (1.28155) 并进行数学计算来计算数字 z 系列的第 90 个百分位。但我的实现和内置函数之间的数字越来越不一致。这是因为我的 z 分数不准确还是我只是误解了某些内容?

select round(((1.28155 * stddev(num)) + avg(num)),1) as my_number,
       percentile_cont(.90) within group ( order by num) as NINETIETH from (
    select level as num from dual connect by level <= 1000
)

结果:

MY_NUMBER 第九十
870.6 900.1
sql oracle statistics
1个回答
0
投票

z-score 假设分布是正态分布。

生成的值是正态分布的第 90 个百分位,其平均值和标准差与您的数据相同。不幸的是,您的分布不是正态分布

如果生成正态分布:

SELECT ROUND(1.28155 * s.stddev + s.mean,1) AS my_number,
       ( SELECT PERCENTILE_CONT(.90) WITHIN GROUP (
                  ORDER BY DBMS_RANDOM.NORMAL() * s.stddev + s.mean
                )
         FROM   DUAL
         CONNECT BY LEVEL <= 1000
       ) AS NINETIETH
FROM   (SELECT 500 AS mean, 250 AS stddev FROM DUAL) s

那么输出可能(随机)是:

MY_NUMBER 第九十
820.4 818.176123750928889247317476609317779925

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.