PERCENTILE_DISC - 排除空值

PERCENTILE_DISC - Exclude Nulls

我在使用 PERCENTILE_DISC 时遇到问题,其中以下查询将“中位数”返回为 310,但实际中位数为 365。它返回 310,因为它包含 NULL 值。

有没有办法让 PERCENTILE_DISC 排除 NULLS? Gordon Lindoff 在此 中提到 NULL 被排除在 PERCENTILE_DISC 之外,但事实并非如此。

这是显示问题的简单示例:

SELECT
    DISTINCT PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY Numbers) OVER (PARTITION BY Category)
from 
    (
        select 1 as Category,420 as Numbers
        union all
        select 1,425
        union all
        select 1,NULL
        union all 
        select 1,310
        union all
        select 1,300
    ) t1

根据 documentation for PERCENTILE_DISC,结果始终等于特定列值。

PERCENTILE_DISC 确实忽略了 NULL-s:如果你要求 PERCENTILE_DISC(0) 你会得到 300,而不是 NULL。

要得到你想要的值(365,也就是310到420之间的平均值),你需要使用PERCENTILE_CONT。请参阅上述文档中的第一个示例,其中突出显示了 PERCENTILE_CONT 和 PERCENTILE_DISC.

之间的区别