我目前正在使用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
关于如何实现这一目标的任何建议? 谢谢!
答案 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;