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

MySQL透视表查询中如何添加金额字段的求和列?

MySQL行转列查询新增金额汇总列的实现方法

先基于通用的行转列场景给出示例代码,你可以对应自己的表字段调整即可:

基础场景:新增每行的横向金额汇总列

假设你已经写出了如下基础行转列查询(以销售数据按月份统计为例,你可以替换成自己的业务字段):

SELECT 
    category,
    SUM(IF(MONTH(sales_date) = 1, amount, 0)) AS `1月销售额`,
    SUM(IF(MONTH(sales_date) = 2, amount, 0)) AS `2月销售额`,
    SUM(IF(MONTH(sales_date) = 3, amount, 0)) AS `3月销售额`
FROM sales
GROUP BY category;

要新增每行所有金额的汇总列,直接在SELECT字段列表添加SUM(amount)即可,修改后代码如下:

SELECT 
    category,
    SUM(IF(MONTH(sales_date) = 1, amount, 0)) AS `1月销售额`,
    SUM(IF(MONTH(sales_date) = 2, amount, 0)) AS `2月销售额`,
    SUM(IF(MONTH(sales_date) = 3, amount, 0)) AS `3月销售额`,
    -- 新增横向汇总列
    SUM(amount) AS `季度总销售额`
FROM sales
GROUP BY category;

扩展场景:新增全表纵向汇总行

如果你需要在所有行的末尾加一行所有金额的总计,可使用WITH ROLLUP实现:

SELECT 
    IFNULL(category, '总计') AS category,
    SUM(IF(MONTH(sales_date) = 1, amount, 0)) AS `1月销售额`,
    SUM(IF(MONTH(sales_date) = 2, amount, 0)) AS `2月销售额`,
    SUM(IF(MONTH(sales_date) = 3, amount, 0)) AS `3月销售额`,
    SUM(amount) AS `季度总销售额`
FROM sales
GROUP BY category WITH ROLLUP;

注意事项

  • 直接使用SUM(amount)的计算方式比手动拼接各个转列字段相加性能更好,结果完全一致
  • 如果你的金额字段存在NULL值,可使用SUM(IFNULL(amount, 0))处理,避免统计结果返回NULL
  • WITH ROLLUP生成的汇总行,分组字段会返回NULL,使用IFNULL替换为自定义的总计标识即可提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:42:01