记录一下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时替换为合计,执行结果如下,便是插入了一行合计

 

posted @   jiangyang6634  阅读(811)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示