当前位置: 首页 > article >正文

mysql中union all和WITH ROLLUP实现汇总的两种方式

目录

一、场景需求

二、UNION ALL实现方式

三、WITH ROLLUP实现方式

四、对比总结


一、场景需求

假设存在销售记录表sales:

CREATE TABLE sales (
    sale_date DATE,
    product VARCHAR(50),
    amount DECIMAL(10,2)
);

需要实现:1. 按日统计总销售额 2. 按产品统计总销售额 3. 整体汇总统计

二、UNION ALL实现方式

实现原理

通过多个SELECT语句的集合操作合并结果

-- 按日期汇总
SELECT sale_date, NULL AS product, SUM(amount) AS total
FROM sales
GROUP BY sale_date

UNION ALL

-- 按产品汇总
SELECT NULL, product, SUM(amount)
FROM sales
GROUP BY product

UNION ALL

-- 整体汇总
SELECT NULL, NULL, SUM(amount)
FROM sales;

特点分析:

  1. 优点:

可灵活组合不同维度统计

支持跨表联合查询

  1. 缺点:

SQL语句冗余

多次全表扫描影响性能

需要手动处理NULL值标识

三、WITH ROLLUP实现方式

实现原理

通过GROUP BY的扩展子句生成层级汇总

SELECT 
    COALESCE(sale_date, '总计') AS sale_date,
    COALESCE(product, '全部产品') AS product,
    SUM(amount) AS total
FROM sales
GROUP BY sale_date, product WITH ROLLUP
HAVING (sale_date IS NOT NULL AND product IS NOT NULL)  -- 排除中间层级
    OR (sale_date IS NULL AND product IS NULL);  -- 仅保留最终汇总

特点分析:

  1. 优点:

单次查询完成多级汇总

自动生成层级关系

执行效率更高

  1. 缺点:

汇总层级固定(从右向左递减)

NULL值需要特殊处理

无法跨不同分组维度组合

四、对比总结

维度

UNION ALL

WITH ROLLUP

实现复杂度

高(需写多个查询

低(自动生成层级

执行性能

多次全表扫描

单次扫描优化

结果可读性

维度区分清晰

需要处理NULL标识

灵活

支持任意维度组合

层级关系固定

版本兼容性

所有MySQL版本

MySQL 5.0+


http://www.kler.cn/a/554334.html

相关文章:

  • Flink CDC详解
  • 在实时大数据处理中如何平衡延迟和吞吐量
  • AI(12)-设备端部署
  • 基于腾讯云大模型知识引擎×DeepSeek构建八字、六爻赛博算卦娱乐应用
  • 【Research Proposal】基于提示词方法的智能体工具调用研究——研究背景
  • 力扣hot100——螺旋矩阵 超简单易懂的模拟搜索方法
  • FastGPT快速将消息发送至飞书
  • OpenCV形态学操作
  • Spring DI
  • 【AB-01】 AUTOSAR Builder软件安装
  • Debezium 报错:“The db history topic is missing” 的处理方法
  • 知识库-知识收藏、取消收藏接口
  • Hutool - DB:基于 ActiveRecord 思想的 JDBC 封装数据操作工具
  • 爱普生 SG-8101CE 可编程晶振在笔记本电脑的应用
  • LabVIEW开发中的电机控制与相机像素差
  • 智能检测摄像头模块在客流统计中的应用
  • Mongoose 搜索注入漏洞分析
  • Elasticsearch7.1.1 配置密码和SSL证书
  • Kafka中commitAsync的使用与实例解析
  • 前端利器:DateUtils 日期时间工具深度剖析