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

news/2025/2/24 15:09:55

目录

一、场景需求

二、UNION ALL实现方式

三、WITH ROLLUP实现方式

四、对比总结


一、场景需求

假设存在销售记录表sales:

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

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

二、UNION ALL实现方式

实现原理

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

sql">-- 按日期汇总
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的扩展子句生成层级汇总

sql">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.niftyadmin.cn/n/5864503.html

相关文章

Docker挂载数据显式挂载和隐式挂载的区别

项目使用的Docker file 创建数据卷挂载点,结果发现宿主机目录中的数据卷路径下是空的,才知道docker file中创建的数据卷是隐式挂载,并不会在宿主机上留下持久化数据,随着容器被删除隐式挂载的数据卷也会跟着被删除 后面改为在jen…

php处理图片出现内存溢出(Allowed memory size of 134217728 bytes exhausted)

错误: 最近做图片上传功能时发现上传某些图片时报内存溢出错误。如下所示: {"code": 0,"msg": "Allowed memory size of 134217728 bytes exhausted (tried to allocate 24576 bytes)","data": {"code&q…

智慧废品回收小程序php+uniapp

废品回收小程序:数字化赋能环保,开启资源循环新时代 城市垃圾治理难题,废品回收小程序成破局关键 随着城市化进程加速与消费水平提升,我国生活垃圾总量逐年攀升,年均增速达5%-8%,其中超30%为可回收物。然…

《2024工业控制系统网络安全态势白皮书》

一、白皮书发布背景 东北大学“谛听”网络安全团队近日撰写并发布了2024年工业控制网络安全态势白皮书,读者可以通过报告了解2024年工控安全相关政策法规报告及典型工控安全事件分析。 二、白皮书主要内容 报告对工控系统漏洞、联网工控设备、工控蜜罐与威胁情报…

【CSS】---- CSS 变量,实现样式和动画函数复用

1. 前言 本文介绍 CSS 的自定义属性(变量)来实现样式、动画等 CSS 的复用。都是知道在 CSS 和 JS 复用一个很重要的事情,比如 JS 的函数封装,各个设计模式的使用等等,CSS 中样式的复用,同样重要。MDN 使用 CSS 自定义属性(变量):自定义属性(有时候也被称作CSS 变量或…

计算机视觉算法实战——三维重建(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ 1. 三维重建领域简介 三维重建(3D Reconstruction)是计算机视觉的核心任务之一,旨在通过多视角图像、视频…

编程题-连接两字母单词得到的最长回文串(中等)

题目: 给你一个字符串数组 words 。words 中每个元素都是一个包含 两个 小写英文字母的单词。 请你从 words 中选择一些元素并按 任意顺序 连接它们,并得到一个 尽可能长的回文串 。每个元素 至多 只能使用一次。 请你返回你能得到的最长回文串的 长度…

Unity打包APK报错 using a newer Android Gradle plugin to use compileSdk = 35

Unity打包APK报错 using a newer Android Gradle plugin to use compileSdk 35 三个报错信息如下 第一个 WARNING:We recommend using a newer Android Gradle plugin to use compileSdk 35This Android Gradle plugin (7.1.2) was tested up to compileSdk 32This warning…