SQL(DB2)查询可以计算出前10%的收入贡献客户

时间:2016-07-08 12:43:54

标签: sql db2 rows

我在一家电信公司工作,我需要为那些在本月贡献公司总收入10%的高价值客户运营一个计划。我想知道有资格参加此计划的客户数量?我正在使用SQL DB2。

前 - 在下表中,收入总和为5000,其10%为500,我想知道其收入总和为500或略高于500的最低客户数

Customers   Revenue
A   156
B   259
C   389
D   125
E   578
F   321

2 个答案:

答案 0 :(得分:2)

查找 总收入至少占总收入10%的所有客户:

select customer
from the_table
group by customer
having sum(revenue) >= (select sum(revenue) * 0.1 from the_table);

您的示例数据未显示此信息,但这也会处理表中每个客户的多行(您的示例每个客户只有一行)

得到的数字:

select count(*) 
from (
  select customer
  from the_table
  group by customer
  having sum(revenue) >= (select sum(revenue) * 0.1 from the_table)
) t

答案 1 :(得分:0)

我将此问题解释为希望收入最高的客户,其总和至少占总收入的10%。

您需要累计金额:

select count(*)
from (select t.*, sum(revenue) over (order by revenue desc) as cume_rev,
             sum(revenue) over () as tot_rev
      from t
     ) t
where cume_rev <= tot_rev * 0.1;

这假设每个客户有一行。

编辑:

对于“就在上面”,where子句应为:

    where cume_rev - revenue < tot_rev * 0.1;