如何计算 Postgresql 中按月购买的 2/3?
Posted
技术标签:
【中文标题】如何计算 Postgresql 中按月购买的 2/3?【英文标题】:How to calculate the 2/3 purchased by month in Postgresql? 【发布时间】:2019-11-16 22:20:03 【问题描述】:我有一张名为“sales”的表。
create table sales
(
cust varchar(20),
prod varchar(20),
day integer,
month integer,
year integer,
state char(2),
quant integer
);
insert into sales values ('Bloom', 'Pepsi', 2, 12, 2001, 'NY', 4232);
insert into sales values ('Knuth', 'Bread', 23, 5, 2005, 'PA', 4167);
insert into sales values ('Emily', 'Pepsi', 22, 1, 2006, 'CT', 4404);
insert into sales values ('Emily', 'Fruits', 11, 1, 2000, 'NJ', 4369);
insert into sales values ('Helen', 'Milk', 7, 11, 2006, 'CT', 210);
insert into sales values ('Emily', 'Soap', 2, 4, 2002, 'CT', 2549);
insert into sales values ('Bloom', 'Eggs', 30, 11, 2000, 'NJ', 559);
.... 总共有 498 行。以下是该表的概述:
现在我想获取客户和产品的每个组合购买了 2/3 的销售数量的月份。
结果应该是这样的:
有没有人可以帮我解决这个问题?
【问题讨论】:
向我们展示数据库架构、示例数据、当前和预期输出。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。 How to create a Minimal, Complete, and Verifiable example 【参考方案1】:你可以使用窗口函数,然后聚合:
select year, cust, prod, min(month)
from (
select
s.*,
sum(quant) over(partition by year, cust, prod order by month, day) quant_cumul,
sum(quant) over(partition by year, cust, prod) quant_total
from sales s
) t
where quant_cumul > 2/3 * quant_total
group by year, cust, prod
内部查询计算每个(year, cust, prod)
tupe 的累积总和和数量的全局总和。然后外层查询过滤累计总和超过总量2/3的记录,得到每个元组的最小月份。
【讨论】:
以上是关于如何计算 Postgresql 中按月购买的 2/3?的主要内容,如果未能解决你的问题,请参考以下文章