如何在Oracle SQL中计算条件百分位数

时间:2017-01-14 08:37:23

标签: sql oracle benchmarking percentile

我目前正在使用Oracle SQL,我需要一个逻辑来从数据集中提取特定的基准值。

我有什么:

Article | Sales
1       | 5
2       | 0
3       | 2
4       | 9
........| ......
119     | 3
120     | 8
121     | 12

我需要什么: 我正在寻找文章的前5%,特别是最畅销的文章。为了继续进行分析,我需要在现有列旁边显示该文章的销售额。

假设前5%的文章出售9,12,14,14,17和19次(其中9个是前5%中最差的),表格需要如下所示:

Article | Sales | Benchmark
1       | 5     | 9
2       | 0     | 9
3       | 2     | 9
4       | 9     | 9
........| ......| ......
118     | 3     | 9
119     | 8     | 9
120     | 12    | 9

关于如何实现这一目标的任何建议? 谢谢!

1 个答案:

答案 0 :(得分:0)

一种方法使用percentile_cont()percentile_disc()。但是,我经常手动进行这种类型的计算:

  select t.*,
         min(case when seqnum >= cnt * 19 / 20 then sales end) over () as benchmark
  from (select t.*,
               row_number() over (order by sales) as seqnum,
               count(*) over () as cnt
        from t
       ) t;