我创建了以下带有数据集等级的表:
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世界的新手。
谢谢, 莫妮卡
答案 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>