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

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;

说明

  1. 第一部分SELECT直接查询原表所有数据,完整保留原始行;
  2. 第二部分SELECT仅针对BUM为MT的记录,汇总四个数值字段并指定product_line为'all';
  3. UNION ALL用于合并两组结果,不会自动去重(若用UNION会去重,这里不需要);
  4. 最后的ORDER BY是可选配置,可让MT的汇总行排在该BUM所有原始行的后面(调整CASE内的数值可改为排在前面)。

原SQL的问题

你之前的语句用GROUP BY bum将同一BUM的所有行合并为一行,直接丢失了MT的各产品线原始行;同时CASE逻辑是替换指定产品线名称后再分组,完全不符合“保留原始行+新增汇总行”的需求,因此无法得到预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:52:37