记录一下mysql 的WITH ROLLUP 用法
在 MySQL 中,WITH ROLLUP
是一个用于在 GROUP BY
查询中进行数据汇总的选项。它会生成包含子总计行和总计行的结果集。
当使用 WITH ROLLUP
时,MySQL 会为每个指定的 GROUP BY
列生成一行子总计,并在最后添加一行总计。这些子总计和总计行的值是基于当前查询结果集中的分组的总计。
以下是 WITH ROLLUP
的使用示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | select CASE WHEN order_no IS NULL THEN '合计' ELSE order_no END AS order_no , CASE WHEN order_no IS NULL THEN NULL ELSE customs_date END AS customs_date, CASE WHEN order_no IS NULL THEN NULL ELSE customs_no END AS customs_no, CASE WHEN order_no IS NULL THEN NULL ELSE business_company END AS business_company, CASE WHEN order_no IS NULL THEN NULL ELSE trans_bill_no END AS trans_bill_no,ie_flag, SUM ( CASE WHEN fee_name = '报关费' THEN total_amount ELSE 0 END ) AS 报关费, SUM ( CASE WHEN fee_name = '报检费' THEN total_amount ELSE 0 END ) AS 报检费, teu, SUM ( CASE WHEN fee_name = '卡口进场理箱费' THEN total_amount ELSE 0 END ) AS 卡口进场理箱费, SUM ( CASE WHEN fee_name = '装卸费' THEN total_amount ELSE 0 END ) AS 装卸费, SUM ( CASE WHEN fee_name = '代理费' THEN total_amount ELSE 0 END ) AS 代理费, SUM (total_amount) AS 小计 from ( SELECT a.order_no, a.customs_date, a.customs_no, a.business_company, a.trans_bill_no, a.teu, b.fee_type, b.fee_code, b.fee_name, b.total_amount, a.ie_flag FROM biz_order_customs AS a LEFT JOIN biz_order_fee AS b ON a.order_no = b.order_no ) x group by order_no WITH ROLLUP |
其中使用了 with rollup 函数对分组group by后的结果集进行合计,并且将结果集使用了case when then 来替换,当order_no为null时替换为合计,执行结果如下,便是插入了一行合计
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?