如何计算在Postgresql中按月购买的2/3?

我有一张名为“ 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',22,1,2006,'CT',4404);
insert into sales values ('Emily','Fruits',11,2000,'NJ',4369);
insert into sales values ('Helen','Milk',7,210);
insert into sales values ('Emily','Soap',4,2002,2549);
insert into sales values ('Bloom','Eggs',30,559);

..共有498行。这是此表的概述:

如何计算在Postgresql中按月购买的2/3?

现在我想获得每个月客户和产品组合购买了销售数量的2/3的月份。

结果应如下所示:

如何计算在Postgresql中按月购买的2/3?

有人想帮助我吗?

zouminfeng 回答:如何计算在Postgresql中按月购买的2/3?

您可以使用窗口功能,然后进行聚合:

select year,cust,prod,min(month)
from (
    select 
        s.*,sum(quant) over(partition by year,prod order by month,day) quant_cumul,prod) quant_total
    from sales s
) t
where quant_cumul > 2/3 * quant_total
group by year,prod

内部查询为每个(year,prod)元组计算一个累加和一个全局量之和。然后,外部查询会过滤记录中累计总和超过总数的2/3的记录,并获取每个元组的最小月份。

本文链接:https://www.f2er.com/3088363.html

大家都在问