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

PostgreSQL中SUM函数工作原理:为何按客户名分组求和?

关于PostgreSQL中SUM函数与GROUP BY的工作机制

你的困惑核心在于**GROUP BY customer_name子句的作用**,它直接决定了SUM函数的计算范围:

  1. 先拆解SQL的执行逻辑:

    • 首先通过三次LEFT JOIN,把order_details(订单详情)、products(产品)、orders(订单)、customers(客户)四张表关联起来,得到每条订单详情对应的客户名称和产品价格,此时结果是一条订单详情对应一行数据。
    • 接着GROUP BY customer_name会把所有行按照客户名称归类——相同客户名称的所有行被划分为一个单独的组。
    • 这时SUM(products.price)就不再是对全表的price求和,而是针对每个客户组内的所有产品价格分别计算总和。
    • 最后HAVING SUM(products.price) > 1000.00会过滤掉总和不足1000的客户分组,只保留符合条件的结果。
  2. 用简单示例直观说明:
    假设关联后的数据是:

    customer_nameprice
    张三500
    张三600
    李四300
    李四400

    经过GROUP BY customer_name后会分成两组:

    • 张三组:包含两行,price为500、600
    • 李四组:包含两行,price为300、400

    SUM函数分别计算每组的总和:张三组总和1100,李四组总和700,最终HAVING过滤后只保留张三的记录。

总结:聚合函数(SUM、COUNT、AVG等)的计算范围由GROUP BY决定——没有GROUP BY时对全表计算,有GROUP BY时按每个分组单独计算,这是SQL聚合查询的基础规则。

内容的提问来源于stack exchange,提问作者Semyon Mazepin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:02:11