`

Oracle的GROUP BY语句(支持ROLLUP和CUBE语句)

阅读更多

Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。

如果是ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。

如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。 grouping和grouping_id()可以美化效果。

给一个完整的SQL,我相信根据下面的SQL应该可以学习了。

select decode(grouping_id(t2.deptno,ROWNUM),3,'总计',1,'小计',t2.deptno) deptno,
decode(GROUPING(ROWNUM), 1, NULL, MAX(t2.dname)) dname,
decode(GROUPING(ROWNUM), 1, NULL, MAX(EMPNO)) EMPNO,
decode(GROUPING(ROWNUM), 1, NULL, MAX(ENAME)) ENAME,
decode(GROUPING(ROWNUM), 1, NULL, MAX(job)) job,
SUM(t1.sal)
FROM scott.emp t1, scott.dept t2
WHERE t1.deptno = t2.deptno
GROUP BY ROLLUP(t2.deptno, ROWNUM)

 

 

 

select job,deptno,sum(sal) total_sal

from emp group by rollup(job,deptno);

分享到:
评论

相关推荐

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

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

    rollup及cube的使用

    `ROLLUP`是一个分组函数,它能够生成所有可能的子集汇总,通常与`GROUP BY`语句一起使用。当我们在查询中使用`ROLLUP`时,它会按照指定的列进行分组,并且还会返回每一级的汇总结果。下面通过具体的例子来详细了解`...

    oracle group by语句实例测试

    Oracle中的`GROUP BY`语句是SQL查询中的关键部分,用于根据一个或多个列对数据进行分组,以便对每个组执行聚合函数,如`SUM`、`COUNT`、`AVG`等。在本例中,我们看到的`GROUP BY`语句是用来对`test`表中的数据进行...

    自己整理的Oracle常用高级语句.rar

    ROLLUP操作符在GROUP BY子句中使用,生成多层汇总,类似于SQL的“cube”功能,但只计算上一层的数据。这在报表分析中非常有用。 7. **数据链路的使用**: 数据链路是Oracle数据库间通信的方式,允许在不同网络...

    sql-Group-by.rar_oracle

    在Oracle数据库中,GROUP BY语句是SQL查询中的一个关键组成部分,它用于对数据进行分组,以便可以对每个分组应用聚合函数,如COUNT、SUM、AVG、MAX和MIN。这个“sql-Group-by.rar_oracle”压缩包文件包含了一个名为...

    Oracle分组函数之ROLLUP的基本用法

    总结来说,Oracle的`ROLLUP`和`CUBE`函数是强大的数据分析工具,能够帮助用户快速生成多层次的汇总数据,适用于各种复杂的数据报告需求。在处理大量数据时,它们的简洁语法和高效性能使得数据聚合变得更为方便。理解...

    Oracle和SqlServer语法区别

    [GROUP BY [ALL] group_by_expression [,Un] [ WITH { CUBE | ROLLUp } ]] [HAVING search_condition] [ORDER BY order_expression [ASC | DESC] ] ``` 可以看到,Oracle的SELECT语句支持更多的子句,例如START ...

    ORACLE学习笔记系列(15)使用扩展的 GROUP BY 子句

    在标准的GROUP BY语句中,我们通常会指定一列或多列,然后应用聚合函数如COUNT(), SUM(), AVG(), MAX(), MIN()等来对每个分组进行计算。然而,Oracle提供了更强大的扩展,让我们可以执行更灵活的数据分析。 1. **...

    ORACLE和SQL Server的语法区别

    [WITH {CUBE|ROLLUP}] HAVING search_condition ORDER BY order_expression ``` - **转换策略:** - 移除Oracle特有的基于成本的优化提示。 - 使用SQL Server的优化器。 - 使用递归CTEs替代`START WITH ... ...

    Oracle分组统计

    在 Oracle 中,除了 Grouping Sets 之外,还有其他两种分组统计方法:Rollup 和 Cube。Rollup 是一种统计方法,它可以对数据进行分组和聚合计算,但它只能对单个列进行分组。Cube 是一种特殊的分组统计方法,它可以...

    oracle中使用group by优化distinct

    2. **使用`GROUP BY ROLLUP/CUBE/GROUPING SETS`**:这些高级`GROUP BY`技术可以组合不同的分组,以实现类似于`DISTINCT`的效果。例如,如果所有字段都需去重,可以使用`GROUP BY`加上所有字段,然后利用`ROLLUP`或`...

    ORACLE__SQL.rar_oracle

    3. **Oracle特有功能**:Oracle数据库提供了一些特有的SQL语法和功能,如游标(CURSOR)、PL/SQL(Oracle的存储过程语言)、分组函数(GROUP BY, ROLLUP, CUBE)以及窗口函数(OVER()子句)。 4. **数据类型**:...

    oracle书籍

    9. 分组和分析函数:如GROUP BY、ROLLUP、CUBE和RANK等,用于数据的分组汇总和复杂分析,是大数据处理和OLAP操作的关键。 10. 连接函数:如CONNECT_BY_ROOT和START_WITH,用于构建复杂的树状查询,处理层次结构数据...

    Oracle中用GROUPING SETS分组自定义汇总

    与`GROUP BY ROLLUP`和`GROUP BY CUBE`相比,`GROUPING SETS`更具有选择性,可以精确地控制生成的汇总组。`ROLLUP`生成所有可能的子集,而`CUBE`则生成所有可能的组合,这两者可能会产生大量的结果,尤其是在处理多...

    Oracle 10g培训经典_中文版

    - Les17_对 GROUP BY 子句的扩展.ppt可能深入讨论了GROUP BY的高级用法,如HAVING子句和ROLLUP/CUBE/GROUPING SETS。 通过这套培训资料,学习者可以从基础的SQL语法到复杂的数据库管理技巧逐步进阶,了解并掌握...

    不错的oracle教学课件

    10. **Les17分组查询扩展.ppt** - 分组查询的高级用法,可能包含GROUP BY ROLLUP、CUBE和GROUPING SETS,这些功能允许更灵活的数据汇总和分析。 通过这个教学课件,学习者不仅可以掌握Oracle SQL的基本语法,还能...

    oracle函数

    GROUP BY 语句的扩展,ROLLUP 和 CUBE 提供了多级分组的功能。 1. ROLLUP:生成所有可能的子集组合,从最细粒度的分组到最粗粒度的全表分组。例如,GROUP BY ROLLUP(A, B, C)会生成(A,B,C), (A,B), (A), 和 ()的...

    oracleOcp课程大纲

    6. 探索高级SQL查询技术,如合并查询(MERGE)、并集(UNION ALL)、交集(INTERSECT)、差集(MINUS),以及GROUP BY、ROLLUP、CUBE等聚合函数,提升数据提取效率。 7. 学习编写SQL脚本,生成报表样式的输出结果,...

Global site tag (gtag.js) - Google Analytics