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 按日输出 取整数,Oracle按日周月分組統計,及next_day()函數詳解

    1.概述 工作中遇到如下問題:統計周期內關鍵詞數,而這里的周期內最常用的就是日周月. 日月比較容易處理,周的話可以通過next_day()函數實現. 2.實例問題 如下,有一張表ljb_test,包括 ...

  3. oracle里有没有stuff,STUFF函數在SQL Server和ORACLE中

    第一個問題是STUFF函數在SQL Server中.第二個問題是關於Oracle(8i)中的STUFF函數. 問題1:如何從列中刪除,我想要的東西? 例如,假設表: ID Country Paymen ...

  4. oracle decode(nvl(estimate_qty,0),0,1,estimate_qty) 函數

    oracle   decode(nvl(estimate_qty,0),0,1,estimate_qty) 函數 转载于:https://www.cnblogs.com/buy0769/p/40629 ...

  5. Oracle SQL 內置函數大全

    <<Oracle SQL 內置函數大全>>幻灯片:http://files.cnblogs.com/Dicky/Oracle_SQL_Function.rar   1SQL中的 ...

  6. oracle倍数四舍五入,Oracle 的 Round 函數(四舍五入)函数

    Oracle 的 Round 函數(四舍五入)函数 该函数用来返回一个四舍五入后的值 SELECT ROUND( number, [ decimalplaces ] ) from DUAL 參數: 必 ...

  7. oracle中sysdate函数 ro,ORACLE常用函數

    一.to_date(欄位(字符串),格式)函數: 將字符串轉換成指定格式的date數據類型 例子: to_date('2017/11/29','yyyy/MM/dd') 二.to_char(欄位(日期 ...

  8. 修改oracle 安裝參數,oracle 安裝相關參數設定

    1,设置系统参数: Oracle 数据库 10g 需要以下所示的内核参数设置. 一般情况下可以设置最大共享内存为物理内存的一半,如果物理内存是 2G,则可以设置最大共享内存为 1073741824, ...

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

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

最新文章

  1. catia怎么创建约束快捷键_答疑 | CATIA结构树无法显示怎么办?
  2. 最小割 ---- 集合冲突模型
  3. tensorflow 学习:用CNN进行图像分类
  4. 【自动驾驶】16.计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
  5. JavaScript知识点总结(二)
  6. CYP音乐emlog主题免费版 炫酷黑色主题
  7. Dynatable – 基于 HTML5 jQuery 的交互表格插件
  8. Spring BeanFactory和FactoryBean的区别
  9. 不能错过的linux驱动开发的经典书籍推荐
  10. 运筹学考题汇总(填空题+计算题)带答案
  11. AI美杜莎来袭 · 光点2021
  12. 算法训练 递归输出数字三角形
  13. 免费的局域网文档协作办公方式—onlyoffice文档协作
  14. JAVA语言基础知识总结
  15. 回路、简单回路、简单路径
  16. [HNOI2003]激光炸弹(二维前缀和+大坑点)
  17. 一次性刻录光盘内容(刻录完成后不能再编辑光盘中内容)
  18. 大小端交换的程序_数据库在小程序云开发中的应用
  19. 什么是hql以及hql和sql的区别
  20. 余光中老爷爷走好!!!

热门文章

  1. 硬回车与软回车[转]
  2. Myeclipse8.5配置本地tomcat
  3. [Cocoa]深入浅出Cocoa之Core Data(4)- 使用绑定
  4. PHP入门指导:如何学习PHP?
  5. asp.net性能常用优化
  6. 我要放弃RedHat Linux了
  7. Python入门篇-functools
  8. 我的ubuntu8.04安装经验 (转)
  9. Linux下如何释放内存
  10. 某医院DFT SCSI 300GB *8 RAID5数据恢复成功