在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。也许我得学蟒蛇。
发布于 2020-02-14 02:20:11
如果我理解正确的话,你想要的产品是从所有产品中创造出前80%的产品。让我们有一个这样的表:
这将是您的查询:
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;
要得到这样的结果:
唯一的问题是,如果你有两个产品在顶部,有完全相同的需求。这将显示或不显示它们-取决于它们在排序列表中的位置。
如果您不关心总和,这是您的查询:
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;
https://stackoverflow.com/questions/60211974
复制相似问题