【发布时间】:2019-10-08 17:55:56
【问题描述】:
我最近才开始使用 Postgresql。我有一个名为“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);
...
总共有 500 行,10 个不同的产品和 5 个不同的客户。
现在我需要,找出 12 个月中每个月最“流行”和最不“流行”的产品(总销量最多和最少的产品)以及相应的总销量(即 SUM)(不分年份)。
结果应该是这样的:
现在我只能这样写查询:
select month,
prod,
sum(quant)
from sales
group by month,prod
order by month,prod;
它给了我这样的结果:
现在我需要获取每个月的最大值。比如第1个月前10个总和中的最大值,以此类推……
我还需要得到总和的最小值(不管是什么年份)。并且将它们水平组合...我不知道这个...
【问题讨论】:
-
Sample data 更好地表示为formatted text。请参阅here 了解有关如何创建漂亮表格的一些提示。
-
快速说明:我建议在操作日期时使用 TIMESTAMPTZ 类型或任何其他时间类型,而不是使用三个不同的行。这允许您执行
WHERE date >= NOW() - INTERVAL '1 month'之类的操作,并避免在每个查询中从各个组件构建新日期。 -
嗯...谢谢你的建议。但是你能写一个示例查询吗??
标签: postgresql sum max row-number case-when