
SQL Rollup用法及小计汇总
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
本教程深入解析SQL中的ROLLUP操作符,介绍如何使用它进行数据的小计和总计计算,帮助用户掌握多级聚合查询技巧。
SQL中的ROLLUP操作是一种用于生成多级汇总的强大方法,在Oracle、SQL Server等多种数据库管理系统中得到广泛应用。它与GROUP BY语句结合使用,能够创建数据的上卷(roll-up)或聚合视图,从最细粒度的数据逐层向上进行汇总到最粗粒度级别。
1. 单一维度汇总
当只有一个层次需要汇总时,ROLLUP会为每个组生成总和,并最终计算所有组的总计。例如:
```sql
SELECT province AS 省, SUM(score) AS 分数
FROM tb
GROUP BY province WITH ROLLUP;
```
该查询按省份分组并汇总分数,最后显示总的得分情况。
2. 多级维度汇总
对于多层级分类(比如省份和城市),ROLLUP可以生成各层次的子总和直到最高级别的总计。例如:
```sql
SELECT province AS 省, city AS 市, SUM(score) AS 分数
FROM tb
GROUP BY province, city WITH ROLLUP;
```
这将按省份及城市分组,然后汇总每个城市的分数、每省的总和以及整个表的数据。
3. 使用GROUPING函数识别汇总级别
通过`GROUPING()`函数可以确定当前行是否属于汇总数据。例如:
```sql
SELECT province AS 省, city AS 市, SUM(score) AS 分数,
GROUPING(province) AS g_p, GROUPING(city) AS g_c
FROM tb
GROUP BY province, city WITH ROLLUP;
```
这将返回每个分组的汇总分数,并标明province和city字段是否在汇总级别上。当`GROUPING`值为1时,表示该字段处于汇总层级;若为0,则代表普通数据行。
4. 自定义小计与总计标签
结合使用`GROUPING()`函数可以定制不同层次的小计和总计标识符。例如:
```sql
SELECT
CASE
WHEN GROUPING(province) = 1 THEN 合计
ELSE province
END AS 省,
CASE
WHEN GROUPING(city) = 1 AND GROUPING(province) = 0 THEN 小计
ELSE city
END AS 市,
SUM(score) AS 分数
FROM tb
GROUP BY province, city WITH ROLLUP;
```
此查询会在每个省份的下方显示“小计”,在所有省份汇总部分展示“合计”。
综上所述,SQL中的ROLLUP操作是实现多级数据聚合的强大工具。它能够自动生成各级别的小计与总计值,并简化了数据分析和报告创建过程,使得数据库查询更加灵活高效。
全部评论 (0)


