我在一家电信公司工作,我需要为那些在本月贡献公司总收入10%的高价值客户运营一个计划。我想知道有资格参加此计划的客户数量?我正在使用SQL DB2。
前 - 在下表中,收入总和为5000,其10%为500,我想知道其收入总和为500或略高于500的最低客户数
Customers Revenue
A 156
B 259
C 389
D 125
E 578
F 321
答案 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;