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.
之间的区别
我在使用 PERCENTILE_DISC 时遇到问题,其中以下查询将“中位数”返回为 310,但实际中位数为 365。它返回 310,因为它包含 NULL 值。
有没有办法让 PERCENTILE_DISC 排除 NULLS? Gordon Lindoff 在此
这是显示问题的简单示例:
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.