1

我为数据集创建了以下带有排名的表:

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 世界有点陌生。

谢谢,莫妮卡

4

2 回答 2

1

percentile_cont()我认为你可以用聚合函数做你想做的事。看起来你想要中位数:

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

你可以在这里阅读更多关于它的信息。

于 2013-08-07T13:26:03.153 回答
0

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

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

我不确定结果是否与您的计算相符(我的一些统计数据有点模糊)。如果没有,请尝试PERCENTILE_CONT@GordonLinoff 提出的解决方案,否则您可以尝试PERCENT_RANK分析功能 - 只需将NTILE(100)上面的查询替换为PERCENT_RANK().

于 2013-08-07T13:36:10.627 回答