我一直在尝试从特定的百分位数返回行,但我一直在弄错值。数据库中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
当我运行此查询时,我得到一个固定值作为百分位数,并且对于所有行都是相同的。
所需的输出应该是返回xth
百分位数的所有行。
答案 0 :(得分:2)
我想你想要# a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 test
# 1 row1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 8
# 2 row2 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1
:
ntile()
如果你想要前10%,那么使用子查询:
select i.*, ntile(10) over (order by x.score) as decile
from tblscores_info i;
select i.*
from (select i.*, ntile(10) over (order by x.score) as decile
from tblscores_info i
) i
where decile = 10;
函数返回作为断点的值。 PERCENTILE()
实际上指定了“百分位数”。