Postgres如何在按年分组的聚合查询中新增基于总销售额的AVG(sales)列
解决方案
你原查询存在语法错误,多余的WHERE关键字需要先删除,之后可以通过Postgres的窗口函数实现全局统一的平均销售额列:AVG(sales) OVER ()为全局窗口函数,不会受GROUP BY year的分组限制,会基于全表sales字段计算统一的平均值,所有行的该列取值完全一致。
调整后的查询语句如下:
SELECT sum(sales) AS "Sales", sum(discount) AS "discount", year, AVG(sales) OVER () AS "avg_sales_total" FROM Sales_tbl GROUP BY year
如果你需要的是所有年份年度总销售额的平均值(而非单条原始记录销售额的平均值),可以嵌套子查询实现:
SELECT "Sales", "discount", year, AVG("Sales") OVER () AS "avg_yearly_sales" FROM ( SELECT sum(sales) AS "Sales", sum(discount) AS "discount", year FROM Sales_tbl GROUP BY year ) t
内容的提问来源于stack exchange,提问作者Gallop
相关产品推荐
相关产品推荐

