在 SQL 中计算百分位数

use*_*206 5 sql oracle percentile quartile

这应该非常简单,但作为 SQL 的新手,我真的很挣扎。我被推荐对连续(非离散)数据使用 PERCENTILE_CONT。

有问题的数据涉及两列:(1) 患者列表的 ID 和 (2) 每年平均事件数。

使用我在网上找到的一些代码,这就是我要做的

SELECT ID,
percentile_cont (0.25) WITHIN GROUP
(ORDER BY PPPY ASC) OVER(PARTITION BY ID) as percentile_25,
percentile_cont (0.50) WITHIN GROUP
(ORDER BY PPPY ASC) OVER(PARTITION BY ID) as percentile_50,
percentile_cont (0.75) WITHIN GROUP
(ORDER BY PPPY ASC) OVER(PARTITION BY ID) as percentile_75
FROM AE_COUNT;
Run Code Online (Sandbox Code Playgroud)

这似乎只是报告了每列具有相同的 PPPY 值。

知道我哪里出错了吗?

小智 3

假设您想获取整个表的百分位数,请尝试以下操作:

SELECT Distinct
percentile_cont (0.25) WITHIN GROUP
(ORDER BY PPPY ASC) OVER() as percentile_25,
percentile_cont (0.50) WITHIN GROUP
(ORDER BY PPPY ASC) OVER() as percentile_50,
percentile_cont (0.75) WITHIN GROUP
(ORDER BY PPPY ASC) OVER() as percentile_75
FROM AE_COUNT;
Run Code Online (Sandbox Code Playgroud)

删除分区语句将对整个表运行它。我还从 select 语句中删除了 Id 列并使其与众不同。

我还想指出,你说第二栏是每年的平均事件数。我不知道您需要百分位数做什么,但请注意,计算一组集合的平均值的百分位数不会产生与计算集合并集的百分位数相同的结果。