MySQL如何汇总指定行数据同时保留原始行?
正确的MySQL查询方案
要实现保留所有原始数据行,同时添加BUM为MT的汇总行(product_line为'all',汇总revenue、gp、labor、cm),可以用UNION ALL将原始数据查询和汇总查询合并,具体SQL如下:
-- 保留所有原始数据行 SELECT BUM, product_line, revenue, gp, labor, cm FROM wpc3_bsd_ops_data UNION ALL -- 生成BUM为MT的汇总行 SELECT 'MT' AS BUM, 'all' AS product_line, SUM(revenue) AS revenue, SUM(gp) AS gp, SUM(labor) AS labor, SUM(cm) AS cm FROM wpc3_bsd_ops_data WHERE BUM = 'MT' -- 可选:按BUM和产品线排序,让汇总行和对应BUM的原始行相邻 ORDER BY BUM, CASE WHEN product_line = 'all' THEN 1 ELSE 0 END, product_line;
说明
- 第一部分
SELECT直接查询原表所有数据,完整保留原始行; - 第二部分
SELECT仅针对BUM为MT的记录,汇总四个数值字段并指定product_line为'all'; UNION ALL用于合并两组结果,不会自动去重(若用UNION会去重,这里不需要);- 最后的
ORDER BY是可选配置,可让MT的汇总行排在该BUM所有原始行的后面(调整CASE内的数值可改为排在前面)。
原SQL的问题
你之前的语句用GROUP BY bum将同一BUM的所有行合并为一行,直接丢失了MT的各产品线原始行;同时CASE逻辑是替换指定产品线名称后再分组,完全不符合“保留原始行+新增汇总行”的需求,因此无法得到预期结果。
内容的提问来源于stack exchange,提问作者ProfoundHypnotic
相关产品推荐
相关产品推荐

