SQL查询/根据排名查找百分位数

时间:2013-08-07 13:22:12

标签: mysql oracle plsql oracle11g plsqldeveloper

我创建了以下带有数据集等级的表:

Position  Index IndexL IndexH Amount Rank
1          2.5    2      3     2000   1     
1          2.5    2      3     3000   2
1          2.5    2      3     4000   3
1          2.5    2      3     5000   4
1          2.5    2      3     6000   5

2          1.5    1      2     2500   1     
2          1.5    1      2     4500   2
2          1.5    1      2     6700   3
2          1.5    1      2     8900   4
2          1.5    1      2     9900   5

现在我想找到基于使用索引创建的排名的百分位数,以便得到以下输出:

Position Amount 
1         3000+(4000-3000)*(2.5-2)
2         2500+(4500-2500)*(1.5-1)

有人可以帮我解决这个问题。我是SQL世界的新手。

谢谢, 莫妮卡

2 个答案:

答案 0 :(得分:1)

我认为您可以使用percentile_cont()聚合功能执行您想要的操作。看起来你想要中位数:

SELECT position,
       PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY Amount) as Median
from t
group by position;

您可以详细了解here

答案 1 :(得分:0)

您可以让Oracle使用NTILE分析函数为您分配百分位数:

SELECT
  position,
  amount,
  NTILE(100) OVER (PARTITION BY POSITION ORDER BY amount)
FROM myTable

我不确定结果是否与您的计算相符(我对某些统计数据有点模糊)。如果没有,请尝试@GordonLinoff提出的PERCENTILE_CONT解决方案,否则您可以尝试使用PERCENT_RANK解析功能 - 只需使用NTILE(100)替换上述查询中的PERCENT_RANK()。< / p>