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

求助:如何基于另一张表更新SQL表的sum_ok与avg_ok字段

解决基于t1更新t2汇总字段的SQL问题

需要根据t1的明细数据,按A、C分组统计status='OK'的数量(sum_ok)和对应数值的平均值(avg_ok),更新到t2的对应字段。

原代码的错误点

  • 引用错误字段:SET子句中使用t2.[status],但t2是汇总表,不存在status字段,应基于t1的status计算。
  • 关联条件不完整:注释掉了t1.C = t2.C,导致无法精准匹配t2中A、C对应的分组行。
  • 聚合函数使用方式错误:直接在UPDATE语句中搭配GROUP BY不符合SQL语法规则,需先通过子查询预计算聚合结果。
  • 平均值逻辑错误:试图对字符串类型的status取平均,应针对t1中的数值字段(如B列),仅统计status='OK'的记录的平均值。

正确的SQL代码

UPDATE t2
SET 
    t2.sum_ok = agg.sum_ok,
    t2.avg_ok = agg.avg_ok
FROM t2
INNER JOIN (
    -- 预计算每个A、C分组的sum_ok和avg_ok
    SELECT 
        A,
        C,
        SUM(CASE WHEN status = 'OK' THEN 1 ELSE 0 END) AS sum_ok,
        -- 仅对status为OK的记录计算数值字段的平均值(示例用B列,可根据实际表结构替换)
        AVG(CASE WHEN status = 'OK' THEN B ELSE NULL END) AS avg_ok
    FROM t1
    WHERE C IS NOT NULL
    GROUP BY A, C
) AS agg ON t2.A = agg.A AND t2.C = agg.C

补充说明

如果t1中用于计算平均值的字段不是B,可根据实际表结构替换为对应数值字段;该语法适用于SQL Server,若为其他数据库(如MySQL),语法会略有调整,但核心逻辑一致——先聚合明细数据,再关联更新汇总表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:10:33