首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >退还占客户总销量80%的顶级产品

退还占客户总销量80%的顶级产品
EN

Stack Overflow用户
提问于 2020-02-14 00:00:34
回答 1查看 58关注 0票数 0

在Access中,我有一个名为‘’cust_ demand‘表,其字段名为customer ID (str)、product ID (str)和demand (int)。我正在尝试创建一个查询(或一组查询),它将返回包含80%的客户数量的最大产品的列表。

我是这个论坛的新手,所以没有能力粘贴表格的图像来显示样本输入和所需的输出。因此,让我尝试在文字中添加一些清晰度。

我本质上是在尝试对我的客户需求集执行Pareto分析。所谓“最大的”产品,我指的是需求最高的产品;实际上,这意味着我在寻找占客户需求80%的最短产品列表。

为了进一步明确,如果7个最大的产品占其需求的79%,而前8个产品占其需求的85%,我想返回8个产品的列表。

此外,如果前5个产品恰好占其需求的80%,而第5和第6大产品具有完全相同的需求,那么返回的列表应该只返回第5或第6个产品,而不是两个都返回,并且返回哪个产品并不重要。

我找到了这篇帖子regarding how to do it in python。但不确定如何将其转换为Access或SQL。也许我得学蟒蛇。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-14 02:20:11

如果我理解正确的话,你想要的产品是从所有产品中创造出前80%的产品。让我们有一个这样的表:

这将是您的查询:

代码语言:javascript
运行
复制
    SELECT p.Product,  p.Cust_demand, (SELECT SUM(Cust_demand) FROM Products as p1 WHERE p.Cust_demand <=p1.Cust_demand) AS SumUpToHere,
    (SELECT SUM(Cust_demand) FROM Products as p1 WHERE p.Cust_demand <=p1.Cust_demand) / (SELECT SUM(Cust_demand) FROM Products as p2) * 100  as PercentUpToHere
    FROM Products as p
    WHERE (SELECT SUM(Cust_demand) FROM Products as p1 WHERE p.Cust_demand <=p1.Cust_demand) / (SELECT SUM(Cust_demand) FROM Products as p2) * 100 <=80
    ORDER BY p.Cust_demand DESC;

要得到这样的结果:

唯一的问题是,如果你有两个产品在顶部,有完全相同的需求。这将显示或不显示它们-取决于它们在排序列表中的位置。

如果您不关心总和,这是您的查询:

代码语言:javascript
运行
复制
SELECT p.Product,  p.Cust_demand
FROM Products as p
WHERE 
       (SELECT SUM(Cust_demand) FROM Products as p1 WHERE p.Cust_demand <=p1.Cust_demand) 
       / (SELECT SUM(Cust_demand) FROM Products as p2) * 100 <=80
ORDER BY p.Cust_demand DESC;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60211974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档