我想在SQL中创建一个类似于下面的flag
的列,在此列中,我可以确定给定时间段内每个区块组销售额的前20%和后20%。我已经将销售汇总到销售组中,但是现在我很难对它们进行标记。例如,在bg2010 1
中,有215笔交易,大约是该时间段内所有交易的前20%(实际上是21.5%,但这还可以)。
我已经尝试过percentile_cont
命令,但并不是我要找的命令,但这可能是因为我没有完全理解它,所以将不胜感激!
bg2010 sales16_17 flag
1 215 top 20th
2 150
3 115
4 100
5 95
6 95
7 85
8 65 bottom 20th
9 45 bottom 20th
10 35 bottom 20th
答案 0 :(得分:4)
使用ntile()
获取1到5之间的数字
select t.*, ntile(5) over (order by sales16_17 desc) as tile
如果您希望将此作为标志,则可以执行以下操作:
select t.*,
(case ntile(5) over (order by sales16_17 desc)
when 1 then 'top 20%'
when 5 then 'bottom 20%'
end) as flag