在SQL中标记百分位数

时间:2018-07-23 16:19:50

标签: sql sql-server percentile

我想在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

1 个答案:

答案 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