计算 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".
我一直在尝试 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".