如何按公司ID分组对baza、tva求和并执行INSERT INTO操作
table.op1表按公司维度合并数据方案
全程通过SQL批量执行,适配1500条以上数据量,无需逐行手动计算,严格以CuiP作为公司唯一标识分组,仅对baza、tva字段做SUM求和,完全匹配示例计算规则。
- 生成分组汇总结果并存入独立新表
执行以下SQL创建独立汇总表,全程不改动原表数据,计算时自动按CuiP隔离不同公司的数据,不会出现跨公司混算:
CREATE TABLE op1_summary AS SELECT CuiP, SUM(baza) AS baza, SUM(tva) AS tva -- 若原表有同公司下取值固定的字段(比如公司名称Society),直接在SELECT后补充字段名即可,不影响分组结果 FROM table.op1 GROUP BY CuiP;
计算逻辑和示例完全对齐:同一家公司的多条记录的tva、baza分别累加,比如Society1两条记录tva500、tva1000汇总为1500,baza100、baza500汇总为600,和预期结果一致。
- 核对汇总结果后清空原表
先抽查汇总表数据确认计算正确:
-- 查看前10条汇总结果做抽样校验 SELECT * FROM op1_summary LIMIT 10;
确认结果无误后清空原表,TRUNCATE执行效率高但不可回滚,务必完成校验再执行:
TRUNCATE TABLE table.op1;
如果需要预留回滚空间,可替换为DELETE FROM table.op1;,千级数据量下两者执行速度差异可忽略。
- 将汇总结果写回原表
执行插入语句把汇总表的计算结果导回原表:
INSERT INTO table.op1 (CuiP, baza, tva) SELECT CuiP, baza, tva FROM op1_summary;
操作完成后可做全量一致性校验,确保无数据遗漏:
-- 对比清空原表前查询到的baza、tva总和,数值完全相等即代表计算无遗漏 SELECT SUM(baza) AS total_baza, SUM(tva) AS total_tva FROM table.op1;
如果后续不需要保留汇总表,可执行DROP TABLE op1_summary;删除即可。
内容的提问来源于stack exchange,提问作者Stefan3D
相关产品推荐
相关产品推荐

