繁体   English   中英

如何标记累计总收入的百分比

[英]how to flag % revenue from a cumulative total

我有一个表客户,如下所示

在此处输入图像描述

所有 10 个客户产生的总收入为 100,000。 在这一总收入中,客户 A、B、C 贡献了近 85% 的收入。 我想根据 80-20 规则划分我的客户,我想将 A、B、C 标记为 80% 的收入客户并保留为 20% 的收入客户

我们如何在 SQL 中实现这一点

考虑以下方法

select customer, amount,  
  if(flag, '80%', if(row_number() over(partition by flag order by amount desc) = 1, '80%', '20%')) || ' revenue' as flag
from (
  select *, 
    (sum(amount) over(order by amount desc, customer)) / (sum(amount) over()) < 0.8 flag
  from your_table
)    

稍微重构的版本是

select customer, amount,  
  if(flag and row_number() over(partition by flag order by amount desc) > 1, '20%', '80%') || ' revenue' as flag
from (
  select *, 
    amount < percentile_cont(amount, 0.8) over() flag
  from your_table
)     

如果应用于您问题中的示例数据 - output 是

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM