`

函数---GROUPING

SQL 
阅读更多
GROUPING
GROUPING函数可以接受一列,返回0或者1。如果列值为空,那么GROUPING()返回1;如果列值非空,那么返回0。GROUPING只能在使用ROLLUP或CUBE的查询中使用。当需要在返回空值的地方显示某个值时,GROUPING()就非常有用。

1、在ROLLUP中对单列使用GROUPING()

SQL> select division_id,sum(salary)
  2  from employees2
  3  group by rollup(division_id)
  4  order by division_id;

DIV SUM(SALARY)
--- -----------
BUS     1610000
OPE     1320000
SAL     4936000
SUP     1015000
        8881000

加上GROUPING来看看

SQL> select grouping(division_id),division_id,sum(salary)
  2  from employees2
  3  group by rollup(division_id)
  4  order by division_id;

GROUPING(DIVISION_ID) DIV SUM(SALARY)
--------------------- --- -----------
                    0 BUS     1610000
                    0 OPE     1320000
                    0 SAL     4936000
                    0 SUP     1015000
                    1         8881000
可以看到,为空的地方返回1,非空的地方返回0。

2、使用CASE转换GROUPING()的返回值

可能你会觉得前面的0和1太枯燥了,代表不了任何意义,说白了就是不够人性化,呵呵。这个时候我们可以使用CASE来转换为一些有意义的值。

SQL> select
  2  case grouping(division_id)
  3  when 1 then 'all divisions'
  4  else division_id
  5  end as div,
  6  sum(salary)
  7  from employees2
  8  group by rollup(division_id)
  9  order by division_id;

DIV           SUM(SALARY)
------------- -----------
BUS               1610000
OPE               1320000
SAL               4936000
SUP               1015000
all divisions     8881000

3、使用CASE和GROUPING()转换多个列的值

SQL> select
  2  case grouping(division_id)
  3  when 1 then 'all divisions'
  4  else division_id
  5  end as div,
  6  case grouping(job_id)
  7  when 1 then 'all jobs'
  8  else job_id
  9  end as job,
 10  sum(salary)
 11  from employees2
 12  group by rollup(division_id,job_id)
 13  order by division_id,job_id;

DIV           JOB      SUM(SALARY)
------------- -------- -----------
BUS           MGR           530000
BUS           PRE           800000
BUS           WOR           280000
BUS           all jobs     1610000
OPE           ENG           245000
OPE           MGR           805000
OPE           WOR           270000
OPE           all jobs     1320000
SAL           MGR          4446000
SAL           WOR           490000
SAL           all jobs     4936000

DIV           JOB      SUM(SALARY)
------------- -------- -----------
SUP           MGR           465000
SUP           TEC           115000
SUP           WOR           435000
SUP           all jobs     1015000
all divisions all jobs     8881000

16 rows selected.

4、CUBE与GROUPING()结合使用

SQL> select
  2  case grouping(division_id)
  3  when 1 then 'all divisions'
  4  else division_id
  5  end as div,
  6  case grouping(job_id)
  7  when 1 then 'all jobs'
  8  else job_id
  9  end as job,
 10  sum(salary)
 11  from employees2
 12  group by cube(division_id,job_id)
 13  order by division_id,job_id;

DIV           JOB      SUM(SALARY)
------------- -------- -----------
BUS           MGR           530000
BUS           PRE           800000
BUS           WOR           280000
BUS           all jobs     1610000
OPE           ENG           245000
OPE           MGR           805000
OPE           WOR           270000
OPE           all jobs     1320000
SAL           MGR          4446000
SAL           WOR           490000
SAL           all jobs     4936000

DIV           JOB      SUM(SALARY)
------------- -------- -----------
SUP           MGR           465000
SUP           TEC           115000
SUP           WOR           435000
SUP           all jobs     1015000
all divisions ENG           245000
all divisions MGR          6246000
all divisions PRE           800000
all divisions TEC           115000
all divisions WOR          1475000
all divisions all jobs     8881000

21 rows selected.

5、使用GROUPING SETS子句

使用GROUPING SETS子句可以只返回小计记录。

SQL> select division_id,job_id,sum(salary)
  2  from employees2
  3  group by grouping sets(division_id,job_id)
  4  order by division_id,job_id;

DIV JOB SUM(SALARY)
--- --- -----------
BUS         1610000
OPE         1320000
SAL         4936000
SUP         1015000
    ENG      245000
    MGR     6246000
    PRE      800000
    TEC      115000
    WOR     1475000

9 rows selected.


分享到:
评论

相关推荐

    PGConf.CN2019大会资料 培训PPT--5-陈金豹--Grouping Sets

    ### Greenplum中的Grouping Sets实现 #### Greenplum简介 Greenplum是Pivotal公司的一款基于MPP(Massively Parallel Processing)架构的数据仓库产品,它能够在大规模数据集上提供快速的数据分析能力。Greenplom...

    grouping or grouping_id in ORACLE

    在Oracle数据库中,`GROUPING` 和 `GROUPING_ID` 是两种非常有用的函数,它们能够帮助用户更好地理解和组织聚合查询的结果。这两种函数主要用于处理复杂的分组情况,尤其是在使用`ROLLUP` 或 `CUBE` 时更为显著。...

    oracle中的grouping

    在Oracle数据库中,`GROUPING`函数被广泛应用于复杂的分组查询之中,尤其是在存储过程的开发中。本文将详细解释`GROUPING`函数的使用方法及其应用场景,并通过一个示例来帮助理解其工作原理。 #### 一、`GROUPING`...

    VB函数大全

    ### VB函数大全详解 #### Abs函数 - **功能**:返回数值的绝对值。 - **语法**:Abs(number) - `number`:任何有效数值表达式。 #### And运算符 - **功能**:执行两个表达式的逻辑与操作。 - **语法**:...

    《Pro Oracle SQL》Chapter7 -- 7.7Extending Reports with GROUPING()

    在7.7节“Extending Reports with GROUPING()”中,作者深入探讨了如何利用GROUPING函数来增强报告的功能性和灵活性。GROUPING函数在SQL中是一个非常重要的聚合函数,它主要用于处理分组数据,尤其是在进行多级分组...

    《Pro Oracle SQL》Chapter7 Advanced Grouping -- 7.5Putting CUBE To Work

    CUBE的使用通常与聚合函数如SUM、COUNT、AVG等结合,以便对各个分组计算总计、平均值或计数。在业务智能和数据仓库领域,CUBE常常用于创建透视表,帮助用户快速比较不同维度下的指标。 在实际应用中,CUBE可能会...

    《Pro Oracle SQL》Chapter7 Advanced Grouping -- 7.2HAVING Clause

    `HAVING`子句在SQL查询中扮演着至关重要的角色,它用于在聚合函数的结果集上设置条件,这与`WHERE`子句有所不同。`WHERE`子句通常用于筛选原始数据行,而`HAVING`子句则作用于经过聚合后的结果。 在SQL查询中,当...

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

    `GROUPING_ID`函数可以用来标识当前行属于哪个分组集,这对于解析结果集非常有用。 总的来说,`GROUP BY GROUPING SETS`在处理多维度分析时提供了强大的工具,允许我们定制汇总级别,同时保持查询性能的高效。它...

    oracle中聚合函数的扩展使用(ROLLUP CUBE、GROUPING()函数与ROLLUP、CUBE的结合使用等)

    当我们需要更复杂的分组和汇总信息时,可以使用扩展的聚合功能,如ROLLUP、CUBE以及GROUPING()和GROUPING_ID()函数。这些功能允许我们生成多层次的总计和小计,为数据分析提供了极大的灵活性。 1. ROLLUP子句: ...

    Gray-Level Grouping (GLG)的算法实现

    **GLG(Gray-Level Grouping)算法是一种在图像处理领域中用于图像增强的技术。它主要目的是改善图像的视觉效果,突出图像中的重要特征,增强对比度,或者减少噪声。GLG算法通过将图像的灰度级进行分组,然后对每个...

    SQL_Server2008函数大全

    - 在`GROUP BY`语句中,聚合函数用于分组数据,如`GROUP BY GROUPING SETS ((column1), (column1, column2))`。 3. **自定义函数**: - 用户可以创建自己的函数,分为标量值函数、表值函数和聚合函数。 - `...

    DB2各类函数总汇

    聚合函数是指对表中的数据进行聚合操作的函数,常用的聚合函数包括SUM、AVG、MAX、MIN、COUNT、GROUPING SETS 等。 二、类型转换函数 类型转换函数是指将一种数据类型转换为另一种数据类型的函数,DB2 为每种数据...

    db2函数大全聚集函数标量函数

    5. GROUPING 函数:对数据进行分组和汇总。 6. MAX 函数:返回数据集中的最大值。 7. MIN 函数:返回数据集中的最小值。 8. Regression 函数:计算线性回归方程。 9. STDDEV 函数:计算数据集的标准差。 10. SUM ...

    DB2函数详解

    - **定义**:`GROUPING` 函数用于确定查询结果中分组的状态。 - **用途**:在复杂的分组查询中帮助识别未分组的列。 - **语法示例**: ```sql SELECT column1, column2, GROUPING(column1), GROUPING(column2) ...

    《Pro Oracle SQL》Chapter7 --7.6Eliminate NULLs with the GROUPING() Function

    《Pro Oracle SQL》一书的第7章,7.6节专门讲解了如何使用GROUPING()函数来处理这个问题。GROUPING()函数是Oracle数据库提供的一种特殊函数,用于识别汇总结果中的NULL值,并且在分组操作中有着独特的应用。 NULL值...

    SQL Server 2005系统函数总结

    - **GROUPING**: 与GROUP BY语句配合使用,帮助识别分组状态。 - **MAX** 和 **MIN**: 分别获取最大值和最小值。 - **SUM**: 计算总和,支持DISTINCT关键字以排除重复项。 - **STDEV** 和 **STDEVP**: 分别计算标准...

    《Pro Oracle SQL》Chapter7 -- 7.8Extending Reports With GROUPING_ID()

    《Pro Oracle SQL》一书的第七章第7.8节主要探讨了如何通过GROUPING_ID()函数来扩展Oracle SQL报告的功能。GROUPING_ID()在数据分析和报表生成中扮演着重要角色,尤其在处理分组数据时,能提供更详细的分组信息。本...

    黑马程序员Java函数式编程全套视频教程,Lambda表达式、Stream流、函数式编程一套全通关1

    `collect()`方法可以配合`Collectors`类中的静态方法来完成这些转换,如`Collectors.toList()`用于将Stream转换为列表,`Collectors.groupingBy()`用于根据指定条件进行分组。 此外,函数式编程中的高阶函数也是...

    grouping-and-aggregating:关于分组和汇总流数据的教学演示

    通过这个"grouping-and-aggregating"教学演示,你将学习如何在Jupyter Notebook中有效地管理流数据,无论是对数据进行简单的统计分析,还是构建复杂的实时报表。实践中,你需要结合实际数据和业务需求,灵活运用这些...

    sql server函数大合集

    SQL Server 函数大合集 ...GROUPING 函数返回一个聚合函数,用于对数据进行分组操作。 这些函数都是 SQL Server 中常用的函数,用于对数据进行处理和分析。它们可以帮助用户快速地对数据进行处理,提高工作效率。

Global site tag (gtag.js) - Google Analytics