【问题标题】:How to find the average quant of other states and the average quant of other products in Postgresql?Postgresql中如何求其他状态的平均quant和其他产品的平均quant?
【发布时间】:2020-03-12 11:43:19
【问题描述】:

我有一张名为“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 行。以下是该表的概述:

现在我想获得其他州的平均数量和其他产品的平均数量。结果表应如下所示:

这需要在组“外部”进行聚合,我知道如何在组内编写聚合,但我不知道如何编写...有人可以帮我吗?

【问题讨论】:

  • other 你是什么人?
  • 总共有 4 个州,PA、CT、NJ、NY。因此,如果州是 PA,则其他人的平均值是指 CT 和 NJ 和 NY 的平均数量。

标签: postgresql group-by left-join average aggregation


【解决方案1】:

您可以使用windows function in PostgreSQL

select cust,prod,state, avg(quant) OVER (PARTITION BY cust) cust_avg, avg(quant) OVER (PARTITION BY state) other_state_avg,avg(quant) OVER (PARTITION BY prod) other_prod_avg from sales 

【讨论】:

  • 好的,谢谢!但是有没有办法通过避免使用 windows 功能来做到这一点?
  • 是的,使用按列(cust、prod 和 state)计算平均值的子查询,但效率低下,SQL 语言演变为我们;-)
  • 是的,我想知道如何编写这样的子查询......你能给我举个例子吗??
【解决方案2】:

好的,这里有子查询:

select cust,prod,state, 
(select avg(quant) from sales si where si.cust=so.cust)  cust_avg ,
(select avg(quant) from sales si where si.state=so.state) other_state_avg,
(select avg(quant) from sales si where si.prod=so.prod) other_prod_avg 
from sales so

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 2021-12-24
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多