You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何获取指定列的SUM总和与AVG平均值

问题核心原因

  • 对GROUP BY的作用理解有误:GROUP BY会将指定字段取值完全相同的行合并为同一个分组,你当前将product_name、unit_cost、total三个字段都加入了分组字段列表,相当于每条原始数据本身就是一个独立分组,因此SUM(total)、AVG(total)计算的都是单一行的聚合结果,自然和原行数值完全一致。
  • 聚合字段匹配错误:你需要统计的是unit_cost列的总和和平均值,但现有查询中聚合的是total字段,就算分组逻辑正确,也无法得到你需要的结果。

对应解决方法

场景1:只需要全表unit_cost的总和、平均值,不需要明细数据

直接省略GROUP BY,仅保留聚合函数即可,查询语句如下:

SELECT SUM(unit_cost) AS sum_unit_cost, AVG(unit_cost) AS avg_unit_cost
FROM products;

执行后只会返回一行结果,就是全表unit_cost列的总求和值与平均值。

场景2:需要保留所有行的明细数据,同时每行都展示全局的聚合结果

使用窗口函数实现,不需要加GROUP BY,查询语句如下:

SELECT 
  product_name,
  unit_cost,
  units,
  total,
  SUM(unit_cost) OVER() AS global_sum_unit_cost,
  AVG(unit_cost) OVER() AS global_avg_unit_cost
FROM products;

内容的提问来源于stack exchange,提问作者Robin Sage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:06:03