计算 Vertica 数据库中的百分位数

Calculate percentile in Vertica database

我一直在尝试 return 特定百分位数的行,但我一直在获取错误的值。数据库中 SCORE 的值是百分位数的计算依据。

这是我的查询。我正在尝试获取前 10% 中的所有值。

select x.count, MBR_NAME, MBR_ID, SCORE,
PERCENTILE_CONT(0.9) WITHIN GROUP(ORDER BY SCORE) OVER (PARTITION BY x.count) AS PERCENTILE
from tbSCORES_INFO, (select count(*) as count FROM tbSCORES_INFO) as x

当我 运行 这个查询时,我得到一个固定值作为百分位数,它对所有行都相同。

所需的输出应该是 return 属于 xth 个百分位数的所有行。

我想你想要ntile():

select i.*, ntile(10) over (order by x.score) as decile
from tblscores_info i;

如果你想要前 10%,那么使用子查询:

select i.*
from (select i.*, ntile(10) over (order by x.score) as decile
      from tblscores_info i
     ) i
where decile = 10;

PERCENTILE()函数return即断点。 NTILE() 实际上分配了 "percentile".