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

SQL按id分组求和结果远大于预期值,该如何排查?

问题分析与解决方案

核心问题

你的SQL存在两个导致结果偏大的关键错误:

  • 多余关联引发重复计算:你将原始bh表和CTE结果accV按id关联时,同一个id在bh表中有多少条原始记录,accV中对应id的单条value就会被重复匹配多少次,求和时就会被累加多少次,最终结果自然远大于真实值。以你给出的示例数据为例:id=1在bh表有2条记录,accV中id=1的value为300,关联后会生成2行value=300的记录,求和后得到600,是正确值的2倍。
  • CTE逻辑与需求不匹配:你需要的是按id对value求和,但CTE中你使用了max(a_value)取最大值,逻辑完全不符合需求;且你group by字段包含了d_id,会导致同id不同d_id的记录被拆分成多个组,也会干扰最终结果。

正确SQL写法

如果你的需求是统计2021-06-30当天各id对应的value总和,不需要写CTE和关联,直接单表分组聚合即可:

SELECT 
    id,
    SUM(a_value) AS value
FROM bh
WHERE period_end_date = '2021-6-30'
GROUP BY id

如果确实需要先从CTE中做前置计算再求和,也不需要再次关联原始bh表,直接对CTE结果分组即可:

;with accV as (
    SELECT 
        d_id,
        [period_end_date],
        -- 按实际需求选择聚合函数,求和用SUM、取最大值用MAX
        SUM(a_value) as value,
        id
    FROM bh
    where period_end_date = '2021-6-30'
    group by d_id, period_end_date, id
)
SELECT id, sum(value)
FROM accV 
group by id

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:18:01