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

关于ROLLUP和CUBE函数的使用,请参见我的另一篇文章。

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.

oracle case grouping,ORACLE GROUPING函数的使用相关推荐

  1. oracle case nvl,oracle中的nvl 、nvl2、decode、case when 函數的用法

    參考文檔:http://www.cnblogs.com/eshizhan/archive/2012/04/06/2435493.html -- nvl函數 -- NVL( string1, repla ...

  2. oracle case grouping,ORACLE GROUPING函數的使用

    GROUPING函數可以接受一列,返回0或者1.如果列值為空,那么GROUPING()返回1:如果列值非空,那么返回0.GROUPING只能在使用ROLLUP或CUBE的查詢中使用.當需要在返回空值的 ...

  3. oracle case函数用法,ORACLE CASE WHEN用法

    祝大家新年快乐,有任何问题可与我联系: ORACLE CASE WHEN其实就相当于我们程序当中的IF语句,他的语法结构是: CASE WHEN "条件表达式" THEN &quo ...

  4. Oracle分析函数、多维函数和Model函数简要说明,主要针对BI报表统计

    以下代码均经过测试,可直接运行 Oracle分析函数.多维函数和Model函数简要说明,主要针对BI报表统计,不一定很全面,但对BI应用场景做了少许说明 --创建一张销售数量表,数据趋势是递增的 CR ...

  5. group by 字句的扩展+rollup字句+cube字句+grouping()函数

    1rollup字句 rollup字句扩展group by字句,为每一个分组返回一条小计记录,并为全部分组返回总计 列如:rollup字句获取每个部门的工资总计 select d.dname,sum(e ...

  6. oracle 进制,Oracle进制转换函数

    Oracle中没有16进制转2进制的函数,为了工作方便,自己写了一个 create or replace function hex_to_bin(hex varchar2) return varcha ...

  7. Oracle CASE WHEN 使用及保留两位小数

    1.Oracle CASE WHEN 用法介绍 Oracle CASE WHEN 用法介绍 - eshizhan - 博客园 --简单Case函数 CASE sexWHEN '1' THEN '男'W ...

  8. oracle取日期6,Oracle通过日期获取星座函数

    Oracle通过日期获取星座函数 create or replace function get_xingzuo(dt in date) RETURN V ARCHAR2 is xingzuo VARC ...

  9. Oracle使用PL/SQL自定义函数

    这里写目录标题 一.PL/SQL概述 二.变量和常量 2.1变量 2.2赋值方式 2.3常量 2.4常量和变量的区别 三,%type和%rowtype 3.1 %type 3.2 %rowtype 四 ...

  10. oracle绝对值求和,Oracle存储过程当中经常使用函数

    1.字符函数 1.lower(char) upper(char)web lower(char):将字符串转化为小写的格式 问题:将全部员工的名字按小写的方式显示 SQL> select lowe ...

最新文章

  1. _linux运维正确安装oracle流程
  2. ie6 ie7 绝对定位 相对定位 层被遮住
  3. 皮一皮:所以说不管做什么,上风口都是很重要的位置...
  4. scapy安装and简介
  5. cmake导入so库_libgo - 协程库、并行编程库
  6. HALCON示例程序classify_image_class_knn.hdev使用KNN分类器对多通道图像进行分割
  7. Eclipse 编写代码自动提示设置
  8. Java工作笔记-Spring boot中配置文件加密(Jasypt的使用)
  9. gulp-htmlmin 页面压缩插件 gulp插件 参数说明
  10. 图解TCPIP---第二章
  11. Autoencoder理解(2): 自动编码器的作用之稀疏编码
  12. 可以讨论HTML5的QQ群有哪些,QQ群有哪些种类你都知道吗?
  13. ORB_SLAM3系统框图
  14. 上海职业学校计算机证书查询,证书查询
  15. 微信小程序 | 证件照制作小程序源码下载
  16. LeetCode——反转字符串
  17. 最优化理论与KKT条件
  18. 新用户启动Anaconda时,一直卡在loading applications
  19. Android 手机查看 AirPods 电量
  20. 搭建msys2基础开发平台

热门文章

  1. Python函数参数的值传递机制
  2. C++中和“”引用头文件的区别
  3. C++中的文件输入/输出
  4. 图像增强处理之:同态滤波与Retinex算法(二)McCann Retinex和McCann99 Retinex迭代算法
  5. Arduino 例程编译错误 error: unknown type name uint_farptr_t did you mean uint_fast8_t
  6. 基于先验LiDAR点云地图的单目VIO定位
  7. 终于来了,超详细手眼标定原理与实战视频教程
  8. 实操教程:Android部署Nanodet模型完成实时高效的物体检测
  9. ccc数据库的水平分割和垂直分割
  10. 时间选择插件jquery.timepickr