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

SQL 中 ROLLUP 的使用方法

ROLLUP 是 SQL 中一种分组操作,它生成多个分组集的小计行和总计行,提供层次化的汇总数据。


基本语法

SELECT column1, column2, ..., aggregate_function(column)
FROM table
GROUP BY ROLLUP (column1, column2, ...);

使用示例

假设有一个销售表 sales

SELECT region, product, SUM(amount) AS total_sales
FROM sales
GROUP BY ROLLUP (region, product);

这个查询会生成:

  1. 每个地区每种产品的销售总额(最细粒度)

  2. 每个地区所有产品的销售小计

  3. 所有地区所有产品的销售总计


多列 ROLLUP

SELECT year, quarter, month, SUM(revenue) AS total_revenue
FROM financial_data
GROUP BY ROLLUP (year, quarter, month);

这会生成:

  1. 每年每季度每月的收入

  2. 每年每季度的收入小计

  3. 每年的收入小计

  4. 总收入总计

部分 ROLLUP

SELECT department, job_title, gender, AVG(salary) AS avg_salary
FROM employees
GROUP BY department, ROLLUP (job_title, gender);

结合其他 GROUP BY 功能

SELECT store_id, product_category, product_subcategory,SUM(sales) AS total_sales
FROM retail_data
GROUP BY GROUPING SETS ((store_id, product_category, product_subcategory),ROLLUP (store_id, product_category)
);

识别汇总行

SELECT CASE WHEN GROUPING(region) = 1 THEN 'All Regions' ELSE region END AS region,CASE WHEN GROUPING(product) = 1 THEN 'All Products' ELSE product END AS product,SUM(amount) AS total_sales
FROM sales
GROUP BY ROLLUP (region, product);

注意事项

  1. ROLLUP 生成的分组集是从最详细到最不详细的层次结构

  2. 列的顺序会影响结果,ROLLUP(a,b,c) 与 ROLLUP(c,b,a) 结果不同

  3. 在 MySQL 中,ROLLUP 不能与 ORDER BY 一起使用(除非使用 LIMIT)

ROLLUP 是生成层次化报表的强大工具,特别适合需要多级汇总的商业报表场景。

http://www.xdnf.cn/news/60175.html

相关文章:

  • 系统安全及应用
  • Spark-SQL与Hive集成及数据分析实践
  • 【C++游戏引擎开发】第18篇:视锥体裁剪与光源剔除
  • XMLXXE 安全无回显方案OOB 盲注DTD 外部实体黑白盒挖掘
  • 基于LangChain与Neo4j构建企业关系图谱的金融风控实施方案,结合工商数据、供应链记录及舆情数据,实现隐性关联识别与动态风险评估
  • AI 赋能 3D 创作!Tripo3D 全功能深度解析与实操教程
  • 从本地存档到协作开发的Git简单使用
  • visionpro案例: 轴承缺珠检测
  • 递归神经网络
  • 互联网大厂Java面试:Spring Cloud与微服务的奇妙之旅
  • JAVA:利用 Apache Tika 提取文件内容的技术指南
  • 并发编程之ReentrantLock
  • xpath选择器
  • Spring AI 框架-快速搭建以及会话日志(笔记)
  • Java实现希尔排序算法
  • 在线查看【免费】 jpg, jpeg, png, gif, bmp, ico, jfif, webp 等图片预览(翻转,缩放,镜像)文件格式网站
  • 突破网页数据集获取难题:Web Unlocker API 助力 AI 训练与微调数据集全方位解决方案
  • Nginx详细使用
  • 规则引擎 - Easy Rules
  • 使用openssl为localhost创建自签名
  • 运维概述(linux 系统)
  • 【Python核心库实战指南】从数据处理到Web开发
  • MCP + 数据库,一种比 RAG 检索效果更好的新方式!
  • Python+CoppeliaSim+ZMQ remote API控制机器人跳舞
  • 【c语言】指针进阶
  • 2025年首届人形机器人半程马拉松比赛(附机器人照片)
  • [BJDCTF2020]EzPHP
  • JVM有什么调优参数?
  • RSS 2025|苏黎世提出「LLM-MPC混合架构」增强自动驾驶,推理速度提升10.5倍!
  • 阿里云人工智能大模型MCP协议