GROUPING SETS 子句是 SELECT 语句的 GROUP BY 子句的扩展。通过 GROUPING SETS 子句,您可采用多种方式对结果分组,而不必使用多个 SELECT 语句来实现这一目的。这就意味着,能够减少响应时间并提高性能。
使用group by进行分组
select deptno,job,count(*),sum(sal),max(hiredate),min(hiredate)
from emp
group by deptno,job
order by deptno;
结果:
1 10 CLERK 1 1300 1982-1-23 1982-1-23
2 10 MANAGER 1 2450 1981-6-9 1981-6-9
3 10 PRESIDENT 1 5000 1981-11-17 1981-11-17
4 20 ANALYST 2 6000 1987-4-19 1981-12-3
5 20 CLERK 2 1900 1987-5-23 1980-12-17
6 20 MANAGER 1 2975 1981-4-2 1981-4-2
7 30 CLERK 1 950 1981-12-3 1981-12-3
8 30 MANAGER 1 2850 1981-5-1 1981-5-1
9 30 SALESMAN 4 5600 1981-9-28 1981-2-20
使用grouping sets
select deptno,job,count(*),sum(sal),max(hiredate),min(hiredate)
from emp
group by grouping sets((deptno,job),(deptno)) ;
结果:分组小计汇总
1 10 CLERK 1 1300 1982-1-23 1982-1-23
2 10 MANAGER 1 2450 1981-6-9 1981-6-9
3 10 PRESIDENT 1 5000 1981-11-17 1981-11-17
4 10 3 8750 1982-1-23 1981-6-9
5 20 CLERK 2 1900 1987-5-23 1980-12-17
6 20 ANALYST 2 6000 1987-4-19 1981-12-3
7 20 MANAGER 1 2975 1981-4-2 1981-4-2
8 20 5 10875 1987-5-23 1980-12-17
9 30 CLERK 1 950 1981-12-3 1981-12-3
10 30 MANAGER 1 2850 1981-5-1 1981-5-1
11 30 SALESMAN 4 5600 1981-9-28 1981-2-20
12 30 6 9400 1981-12-3 1981-2-20
select deptno,job,count(*),sum(sal),max(hiredate),min(hiredate)
from emp
group by grouping sets((deptno,job),(deptno),()) ;
结果:相比上面多了最后一行总的汇总
1 10 CLERK 1 1300 1982-1-23 1982-1-23
2 10 MANAGER 1 2450 1981-6-9 1981-6-9
3 10 PRESIDENT 1 5000 1981-11-17 1981-11-17
4 10 3 8750 1982-1-23 1981-6-9
5 20 CLERK 2 1900 1987-5-23 1980-12-17
6 20 ANALYST 2 6000 1987-4-19 1981-12-3
7 20 MANAGER 1 2975 1981-4-2 1981-4-2
8 20 5 10875 1987-5-23 1980-12-17
9 30 CLERK 1 950 1981-12-3 1981-12-3
10 30 MANAGER 1 2850 1981-5-1 1981-5-1
11 30 SALESMAN 4 5600 1981-9-28 1981-2-20
12 30 6 9400 1981-12-3 1981-2-20
13 14 29025 1987-5-23 1980-12-17
更深的了解参照http://www.cnblogs.com/caroline/archive/2011/12/10/2283353.html#commentform
分享到:
相关推荐
为了获取多级或自定义的汇总,我们可以使用`GROUPING SETS`功能,它提供了更灵活的分组方式,同时避免了不必要的计算,提高了SQL查询的效率。 `GROUP BY GROUPING SETS`允许我们自定义想要的汇总级别,从而得到特定...
GROUP BY 子句(rollup, cube, grouping sets)实例说明 GROUP BY 子句是 SQL 语言中用于分组数据的关键字,它可以根据一个或多个列对数据进行分组,并对每个分组应用聚合函数,以便计算和输出所需的结果。GROUP BY...
### rollup、cube、grouping sets()的理解及应用 在SQL查询中,当我们需要对数据进行多维度的分组统计时,经常会用到`GROUP BY`子句来完成这一任务。而在更复杂的场景下,为了方便地处理多级别的汇总数据,SQL提供...
### rollup cube grouping sets 的用法 在数据库查询语言 SQL 中,`ROLLUP`, `CUBE`, 和 `GROUPING SETS` 是三个重要的概念,它们主要用于处理多维度数据的汇总和分组问题,使得数据分析更加灵活高效。接下来,我们...
sql学习 grouping sets 之另一需求展现.sql
group by扩展包括 rollup、cube、grouping、grouping sets的用法和说明
### Greenplum中的Grouping Sets实现 #### Greenplum简介 Greenplum是Pivotal公司的一款基于MPP(Massively Parallel Processing)架构的数据仓库产品,它能够在大规模数据集上提供快速的数据分析能力。Greenplom...
在SQL查询中,Grouping Sets是一种高级的分组方法,它允许用户一次性执行多个不同的分组操作,而不需要写多个独立的GROUP BY语句。这个功能在数据分析和在线分析处理(OLAP)中非常有用,因为它能高效地生成汇总数据...
Grouping Sets 是一种特殊的分组统计方法,它可以同时对多个列进行分组和聚合计算。例如,我们可以使用以下 SQL 语句来实现分组统计: ```sql SELECT a, b, c, d, SUM(e) FROM dept GROUP BY GROUPING SETS ((a, ...
本文将详细解释`GROUPING`函数的使用方法及其应用场景,并通过一个示例来帮助理解其工作原理。 #### 一、`GROUPING`函数简介 `GROUPING`函数主要用于标识列是否被包含在`GROUP BY`子句中。当某列未被`GROUP BY`...
这里使用了 `GROUPING(index_type)` 和 `GROUPING(status)` 来分别表示 `index_type` 和 `status` 字段是否参与了当前的分组。如果 `g_ind` 和 `g_st` 都为 0,则表示 `index_type` 和 `status` 都参与了分组;如果 ...
Oracle作为全球广泛使用的大型关系型数据库管理系统,其10g版本在功能和性能上都有显著提升,为开发者提供了更强大的工具和更高效的解决方案。 在Oracle10g中,SQL语言仍然是核心,它允许我们查询、更新、插入和...
赠送jar包:lucene-grouping-6.6.0.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
例如,我们可以在一个阶段使用fields grouping,然后在下一个阶段切换到global grouping。 ```java TopologyBuilder builder = new TopologyBuilder(); builder.setSpout("spout", new MySpout(), ...
这个函数通常与GROUPING SETS、CUBE或ROLLUP等高级分组技术结合使用,帮助用户更灵活地处理NULL值和其他分组情况。 例如,如果我们有一个包含产品信息的数据表,其中有些产品的供应商信息可能是NULL,我们可能想要...
extJs grouping分组源码 类似qq分组功能
该插件的使用方法通常是通过集成到Android Studio中。在安装后,用户可以在IDE的菜单栏找到插件的相关设置,配置分组规则。这些规则可以基于文件类型、文件名、目录结构等多种条件,使得分组更加灵活和适应性强。 ...
本文将深入探讨`GroupBy`方法的使用,包括其基本用法、多键分组以及在实际开发中的应用示例。 ### 1. 基本用法 `GroupBy`方法接收一个函数作为参数,该函数用于从每个元素中提取分组键。例如,如果你有一个`...