【问题标题】:Decile analysis - customer and revenue and vice versa十分位分析 - 客户和收入,反之亦然
【发布时间】:2019-01-16 11:36:58
【问题描述】:

我正在尝试生成显示两件事的分析。

  1. 客户及其收入的十分位数(或百分位数),以便我了解 10% 的客户数量产生的收入最多。

  2. 收入的十分位数:有多少客户产生 10% 的收入。

select yeardate, decile, sum(revenue) as revenue,  count(distinct(customername)) as cust_count
 from 
(
select yeardate,
customername,
ntile(10) over (order by sum(revenue) ) as decile,
sum(revenue) as revenue
from 
(select 
year(DateStamp) as yeardate ,
customername, 
sum(Sell) as revenue
from MarginListView
where reporttype = 'Invoice' and sell >0 and year(datestamp) = 2018
group by year(DateStamp), customername) d
group by yeardate, CustomerName) c
group by yeardate, decile
order by 1,2

我可以获得十分位数的客户数,但不能获得十分位数的收入......

使用 MS SQL 服务器 - 任何帮助表示赞赏。

【问题讨论】:

    标签: sql sql-server percentile


    【解决方案1】:

    要获得产生 10% 收入的客户数量,请从累计收入开始:

    select customername, sum(sell) as revenue,
           sum(sum(sell)) over (order by sum(sell) desc) as running_revenue
    from MarginListView
    where reporttype = 'Invoice' and sell > 0 and 
          year(datestamp) = 2018
    group by customername;
    

    要得到占10%的数字:

    select count(*)
    from (select customername, sum(sell) as revenue,
                 sum(sum(sell)) over (order by sum(sell) desc) as running_revenue,
                 sum(sum(sell)) over () as total_revenue
          from MarginListView
          where reporttype = 'Invoice' and sell > 0 and 
                year(datestamp) = 2018
          group by customername
         ) c
    where running_revenue - revenue >= 0.1 * total_revenue;
    

    【讨论】:

      【解决方案2】:

      Gordon - 感谢您的帮助....它确实让我到达了我需要的地方。

      我就这样结束了……

      select 
      yeardate, customername, 
      sell,
      cast((round(sum(sum(revenue_sub_tot)) over (order by sum(revenue_sub_tot) asc),2,2)) as decimal (2,2)) as revenue_percentiles,
      cast((round(sum(sum(revenue_sub_tot)) over (order by sum(revenue_sub_tot) asc),1,1)) as decimal (2,2)) as revenue_deciles
      from (select year(datestamp) as yeardate,
                   customername, 
      			 sum(sell) as sell,
      			 sum(sell)/sum(sum(sell)) over () as revenue_sub_tot
            from MarginListView
            where reporttype = 'Invoice' and sell > 0 
            group by year(datestamp), customername
           ) c
      	 group by yeardate, customername, sell
      order by 1,3

      【讨论】:

        猜你喜欢
        • 2014-01-18
        • 2015-09-13
        • 2019-11-09
        • 1970-01-01
        • 2015-01-02
        • 2011-02-02
        • 2021-06-21
        • 2012-12-19
        • 2016-01-27
        相关资源
        最近更新 更多