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

如何在MySQL分组查询中为3个COUNT列添加列总计

实现分组统计+列总计的SQL方案

嘿,我明白你的需求啦——既要保留每个分组的统计数据,又要在结果末尾加上每列的全局总计行对吧?这可以通过UNION ALL把分组统计和总计统计的结果拼接起来实现,下面是具体的方案:

完整SQL代码

-- 先查询各分组的统计数据
SELECT 
  COUNT(DISTINCT od.`meter_serial`) AS 'OGP Created',
  COUNT(DISTINCT mp.`meter_id`) AS 'Installed & Un-Verified Meters',
  COUNT(DISTINCT ins.`meter_msn`) AS 'Installed & Verified',
  sd.`sub_div_code` AS 'SD Code',
  sd.`name` AS 'SD-Name',
  1 AS sort_order -- 辅助排序,让分组数据排在前面
FROM `ogp_detail` od
INNER JOIN `survey_hesco_subdivision` sd ON od.`sub_div` = sd.`sub_div_code`
LEFT JOIN `meter_ping` mp ON od.`meter_id` = mp.`meter_id`
LEFT JOIN `installations` ins ON od.`meter_serial` = ins.`meter_msn`
WHERE od.`meter_type` = '3-Phase'
GROUP BY sd.`name`, sd.`sub_div_code`

UNION ALL

-- 再查询全局总计数据
SELECT 
  COUNT(DISTINCT od.`meter_serial`) AS 'OGP Created',
  COUNT(DISTINCT mp.`meter_id`) AS 'Installed & Un-Verified Meters',
  COUNT(DISTINCT ins.`meter_msn`) AS 'Installed & Verified',
  '总计' AS 'SD Code',
  '总计' AS 'SD-Name',
  2 AS sort_order -- 辅助排序,让总计行排在最后
FROM `ogp_detail` od
INNER JOIN `survey_hesco_subdivision` sd ON od.`sub_div` = sd.`sub_div_code`
LEFT JOIN `meter_ping` mp ON od.`meter_id` = mp.`meter_id`
LEFT JOIN `installations` ins ON od.`meter_serial` = ins.`meter_msn`
WHERE od.`meter_type` = '3-Phase'

ORDER BY sort_order, sd.`name`; -- 先按sort_order排序,再按分组名称排序

关键说明

  • UNION ALL的作用:它能把两个查询的结果合并成一个结果集,而且不会像UNION那样去重,效率更高,完全符合我们保留分组+总计的需求。
  • 辅助排序字段sort_order:加这个字段是为了确保总计行始终显示在所有分组数据的最后,避免排序混乱。
  • 总计行的统计逻辑:这里的总计是直接计算全局范围内的三个统计值,和分组统计的逻辑一致,保证数据准确性。

如果你希望总计行的样式更突出(比如用不同的标识),可以把'总计'改成'====总计===='这类更醒目的文本,方便区分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:38:33