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

多表连接致聚合函数重复统计,求子查询解决方法

解决多表连接导致SUM重复统计的问题

问题根源

你遇到的Total_Revenue翻倍问题,核心原因是Table_3中同一个Order_ID对应多条记录。三表直接连接后,Table_1和Table_2的每一行数据会被重复匹配多次,最终SUM(b.price)会把同一个订单的Price累加多遍,导致结果偏大。

正确的子查询写法

写法一:先聚合Table_2再连接(推荐)

先在子查询中按Order_ID计算每个订单的总价,再和其他表连接,从根源避免重复统计:

SELECT
  a.product,
  SUM(b.order_total) AS Total_Revenue
FROM Table_1 a
JOIN (
  -- 子查询先按订单ID聚合,得到每个订单的总价
  SELECT 
    order_id, 
    SUM(price) AS order_total
  FROM Table_2
  GROUP BY order_id
) b ON a.order_id = b.order_id
JOIN Table_3 c ON a.order_id = c.order_id
GROUP BY a.product

写法二:用EXISTS替代JOIN(如果不需要Table_3的字段)

如果Table_3只是用来过滤存在的订单,不需要它的其他数据,用EXISTS可以避免产生重复行:

SELECT
  a.product,
  SUM(b.price) AS Total_Revenue
FROM Table_1 a
JOIN Table_2 b ON a.order_id = b.order_id
WHERE EXISTS (
  SELECT 1 FROM Table_3 c WHERE c.order_id = a.order_id
)
GROUP BY a.product

你之前写法的问题

你尝试的子查询没有按Order_ID分组,返回的是整个Table_2的总价,无法和单个Order_ID正确关联,所以统计结果无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:22:25