`

oracle--rollup 和cube分组累计求和

阅读更多

         group by 语句支持基本的having条件,还支持rollup和cube提供信息汇总功能,类似小计。

         rollup:纵向小计,从右向左逐个对每一列进行小结并在结果中生成独立的一行。只返回第一个分组条件指定的列的统计行。

         cube:横行小计

select d.deptno,t.job,sum(t.sal) from emp t,dept d
where t.deptno=d.deptno
group by rollup(d.deptno,t.job)

 执行结果:


***

使用grouping_id显示指定的分组级别的记录。返回grouping()位向量的十进制值,GROUPING位向量的计算方法是将按照顺序对每一列调用GROUPING函数的结果组合起来。

例:grouping_id(a,b,c),a为空就是0非空为1,b和c也一样,结果会得到一个三位数,用二进制转换成十进制就是了,a,b,c全是非空,即111就是7,三列就是7,如果是两列自然是11就是3

select ... from 表 group by rollup(.....) having grouping_id(....)<=1

 

rollup(x,y)2列 rollup(x,y,z)3列
总计是grouping_id=3 总计是grouping_id=7
小计grouping_id=1 小计grouping_id=3
记录是grouping_id=0 记录是grouping_id=0

此时要求不显示最后总计行:

 

select d.deptno,t.job,sum(t.sal) from emp t,dept d
where t.deptno=d.deptno
group by rollup(d.deptno,t.job)having grouping_id(d.deptno,t.job)<=1

 执行结果:

 实际情况中要展示结果集中汇总列加上小计和合计,此时这样处理:

select decode(grouping_id(deptno,job),1,'小计',3,'总计',job||deptno)
as group_col,sum(sal) from emp 
group by rollup(deptno,job)

执行结果:

 

 

 

 

扩展:http://msdn.microsoft.com/zh-cn/library/bb510624.aspx

 

  • 大小: 32 KB
  • 大小: 29.8 KB
  • 大小: 30.4 KB
分享到:
评论

相关推荐

    group by分组函数之rollup与cube用法1

    而在GROUP BY的基础上,Oracle数据库提供了两种高级分组功能:ROLLUP和CUBE,它们允许我们更灵活地生成汇总数据。 1. ROLLUP(滚联回溯): ROLLUP是GROUP BY的一个扩展,它不仅返回每个单独的分组结果,还会生成...

    Oracle 分析函数的使用.doc

    - `CUBE` 提供所有可能的分组组合,包括单独的分组和所有组合。它不仅包含`ROLLUP`的所有结果,还包括交叉分组。 2. **排名函数:rank, dense_rank, row_number** - `RANK()` 函数根据指定的排序条件为每一行分配...

    Oracle应用项目——简单数据查询应用.pdf

    从选择特定列、计算到分组、聚合函数、`WHERE`和`HAVING`子句的使用,以及`ROLLUP`和`CUBE`的统计功能,这些都是数据库管理员和开发人员日常工作中必不可少的技能。理解并熟练掌握这些概念和操作,能够帮助用户更...

    Oracle高级sql学习与练习

    21. 连续值和累计值问题关注如何在SQL查询中处理时间序列数据,以及如何生成连续的数值序列或累计值。 22. NULL和DUAL详解讨论了Oracle中的空值概念,以及特殊的虚拟表DUAL的用途。 23. 时间、数字、字符格式详解...

    Oracle函数手册.zip

    6. **分组和分析函数**: - `GROUP BY`: 用于对数据进行分组。 - `ROLLUP()`: 生成多级汇总。 - `CUBE()`: 生成所有可能的子集组合。 - `RANK()`, `DENSE_RANK()`, `ROW_NUMBER()`: 用于排序和生成行号。 7. **...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...

    SQL语句-递归查询、分组、统计.pdf

    在SQL中,递归查询、分组和统计是三个重要的概念,它们分别用于处理层级数据、数据聚合和复杂的数据分析。 1. **递归查询**: 递归查询主要用于处理具有层级关系的数据,例如组织结构、目录树等。在Oracle数据库中...

    SQL和Oracle数据库函数说明

    2. **分组和分析函数**:`GROUP BY ROLLUP()`和`CUBE()`实现多级分组,`RANK()`、`DENSE_RANK()`和`ROW_NUMBER()`用于行排序和排名。 3. **系统信息函数**:如`SYSDATE`获取当前系统日期,`USER`返回当前用户。 4. *...

    oracle函数大全

    - `GROUP BY`和`ROLLUP`、`CUBE`、`GROUPING SETS`配合聚合函数实现分组汇总。 3. **分析函数**: - `RANK()`、`DENSE_RANK()`、`ROW_NUMBER()`用于排序和行编号。 - `LEAD()`、`LAG()`获取行的前后值,`FIRST_...

    关于oracle 函数的网上资料

    6. **分组和分析函数**:`GROUP BY`用于对数据进行分组,`ROLLUP`和`CUBE`生成多级汇总,`HAVING`过滤分组后的结果,`RANK()`, `DENSE_RANK()`和`ROW_NUMBER()`用于行号排序。 7. **系统信息函数**:如`USER`获取...

    Oracle数据库SQL及常用函数命令简介

    #### 十一、数据分组深入 (ROLLUP 和 CUBE) - `ROLLUP` 和 `CUBE` 是扩展的`GROUP BY` 子句,用于生成汇总数据的不同组合。`ROLLUP` 用于生成按列的层级分组,而`CUBE` 生成所有可能的分组组合。 #### 十二、数据...

    oracle group by语句实例测试

    这个查询选择了`d`值为't'的记录,然后根据`a`和`b`列进行分组,对每组的`c`列求和。最后,按照`a`和`b`的顺序进行排序。这里的关键在于`GROUP BY`后的列`a`和`b`,它们定义了分组的依据,而`ORDER BY`则指定了结果...

    精通SQL--结构化查询语言详解

    8.3.3 rollup运算符和cube运算符 151 8.3.4 group by子句中的null值处理 153 8.3.5 having子句 153 8.3.6 having子句与where子句 154 8.3.7 select语句各查询子句总结 156 第9章 多表查询 157 9.1 本章用到的...

    C#程序开发范例宝典(第2版).part13

    精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...

    C#程序开发范例宝典(第2版).part08

    精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...

Global site tag (gtag.js) - Google Analytics