欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 ROLLUP和CUBE语句。 Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

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_id()可以美化效果:

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

除本文内容外,你还可参考:

分析函数参考手册:

http://xsb.itpub.net/post/419/33028

分析函数使用例子介绍:

http://xsb.itpub.net/post/419/44634

SQL> create table t as select * from dba_indexes;

表已创建。

SQL> select index_type, status, count(*) from t group by index_type, status;

INDEX_TYPE STATUS COUNT(*)

--------------------------- -------- ----------

LOB VALID 51

NORMAL N/A 25

NORMAL VALID 479

CLUSTER VALID 11

下面来看看ROLLUP和CUBE语句的执行结果。

SQL> select index_type, status, count(*) from t group by rollup(index_type, status);

INDEX_TYPE STATUS COUNT(*)

--------------------------- -------- ----------

LOB VALID 51

LOB 51

NORMAL N/A 25

NORMAL VALID 479

NORMAL 504

CLUSTER VALID 11

CLUSTER 11

566

已选择8行。

SQL> select index_type, status, count(*) from t group by cube(index_type, status);

INDEX_TYPE STATUS COUNT(*)

--------------------------- -------- ----------

566

N/A 25

VALID 541

LOB 51

LOB VALID 51

NORMAL 504

NORMAL N/A 25

NORMAL VALID 479

CLUSTER 11

CLUSTER VALID 11

已选择10行。

查询结果不是很一目了然,下面通过Oracle提供的函数GROUPING来整理一下查询结果。

SQL> select grouping(index_type) g_ind, grouping(status) g_st, index_type, status, count(*)

2 from t group by rollup(index_type, status) order by 1, 2;

G_IND G_ST INDEX_TYPE STATUS COUNT(*)

---------- ---------- --------------------------- -------- ----------

0 0 LOB VALID 51

0 0 NORMAL N/A 25

0 0 NORMAL VALID 479

0 0 CLUSTER VALID 11

0 1 LOB 51

0 1 NORMAL 504

0 1 CLUSTER 11

1 1 566

已选择8行。

这个查询结果就直观多了,和不带ROLLUP语句的GROUP BY相比,ROLLUP增加了对INDEX_TYPE的GROUP BY统计和对所有记录的GROUP BY统计。

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

下面看看CUBE语句。

SQL> select grouping(index_type) g_ind, grouping(status) g_st, index_type, status, count(*)

2 from t group by cube(index_type, status) order by 1, 2;

G_IND G_ST INDEX_TYPE STATUS COUNT(*)

---------- ---------- --------------------------- -------- ----------

0 0 LOB VALID 51

0 0 NORMAL N/A 25

0 0 NORMAL VALID 479

0 0 CLUSTER VALID 11

0 1 LOB 51

0 1 NORMAL 504

0 1 CLUSTER 11

1 0 N/A 25

1 0 VALID 541

1 1 566

已选择10行。

和ROLLUP相比,CUBE又增加了对STATUS列的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来标识GROUP BY结果。

SQL> select grouping_id(index_type, status) g_ind, index_type, status, count(*)

2 from t group by rollup(index_type, status) order by 1;

G_IND INDEX_TYPE STATUS COUNT(*)

---------- --------------------------- -------- ----------

0 LOB VALID 51

0 NORMAL N/A 25

0 NORMAL VALID 479

0 CLUSTER VALID 11

1 LOB 51

1 NORMAL 504

1 CLUSTER 11

3 566

已选择8行。

SQL> select grouping_id(index_type, status) g_ind, index_type, status, count(*)

2 from t group by cube(index_type, status) order by 1;

G_IND INDEX_TYPE STATUS COUNT(*)

---------- --------------------------- -------- ----------

0 LOB VALID 51

0 NORMAL N/A 25

0 NORMAL VALID 479

0 CLUSTER VALID 11

1 LOB 51

1 NORMAL 504

1 CLUSTER 11

2 N/A 25

2 VALID 541

3 566

已选择10行。

grouping_id()可以美化效果:

select DECODE(GROUPING_ID(C1), 1, '合计', C1) D1,

DECODE(GROUPING_ID(C1, C2), 1, '小计', C2) D2,

DECODE(GROUPING_ID(C1, C2, C1 + C2), 1, '小计', C1 + C2) D3,

count(*),

GROUPING_ID(C1, C2, C1 + C2, C1 + 1, C2 + 1),

GROUPING_ID(C1)

from T2

group by rollup(C1, C2, C1 + C2, C1 + 1, C2 + 1);

===========================================================

1.

报表合计专用的

Rollup

函数

销售报表

以往的查询

SQL:

Select

area,month,sum(money) from SaleOrder group by area,month

[1] [2] [3]

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

oracle如何进行多列分组统计,ORACLE分组统计相关推荐

  1. oracle报错无效列类型,jooq oracle存储过程与ARRAY,无效列类型:1111

    我想在Oracle中使用JOOQ调用存储过程.存储过程的某些输入和输出参数是自定义类型.jooq oracle存储过程与ARRAY,无效列类型:1111 其中之一的定义是: CREATE OR REP ...

  2. oracle有没有稀疏列,稀疏 BLAS - Oracle® Developer Studio 12.5:性能库用户指南

    稀疏 BLAS Oracle Developer Studio 性能库稀疏 BLAS 软件包基于以下两个软件包: Netlib Sparse BLAS 软件包,由 Dodson, Grimes 和 L ...

  3. oracle中怎么给列起别名,oracle中给表和列起别名

    SELECT xxmc,sname asxsxm,sex,phone,address jzdzFROMstudent sLEFT JOIN xxjbxx x ON x.sid = s.sid 此处的s ...

  4. oracle数据库怎么分组查询,oracle数据库之分组查询

    本章内容和大家分享的是数据当中的分组查询.分组查询复杂一点的是建立在多张表的查询的基础之上,(我们在上一节课的学习中已经给大家分享了多表查询的使用技巧,大家可以自行访问:多表查询1  多表查询2)而在 ...

  5. Oracle分组后对分组内容重复 取第一个

    Oracle分组后对分组内容重复 的以另一列排序后 取第一个 语句 select * from( select a.grep, row_number() over (partition by a.gr ...

  6. oracle 行转列后列名,Oracle 多行转多列,列值转为列名

    前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要导出问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人 然后最终自己写出来了 ...

  7. oracle 分组 排名,Oracle数据库之分组查询及排序

    分组查询:使用 group by 来设置分组,把该列具有相同值的多条记录当成一组记录来处理,然后只会输出一条记录,得到的结果会默认使用升序的方式进行排列. 规则: (1)如果使用了分组函数,或者是 g ...

  8. oracle 行转列字符拼接,oracle 行转列,用特殊符号拼接

    第一种 函数 wm_content('待转列名称') 11g 往后,不推荐使用 实例 多表关联时可以使用 (SELECT wm_concat(nvl(B1.OPERA_CODE,'a')) AS OP ...

  9. oracle 表列 自增,ORACLE表建立自增列

    create tablespace studentDB datafile 'E:\datafiles_1.dbf' size 10m; create user Huang_Ying_Bo identi ...

  10. oracle如何查询虚拟列,Oracle11g新特性之--虚拟列(VirtualColumn)

    Oracle 11g新特性之--虚拟列(Virtual Column) Oracle 11G虚拟列Virtual Column介绍 在老的 Oracle 版本,当我们需要使用表达式或者一些计算公式时, ...

最新文章

  1. ACT5.6 动手实验手册 如何在工作组模式下对客户端进行数据收集 如何在AD域环境下对...
  2. JSON 语法之 JSON 文件
  3. IDEA左侧project导航栏设置背景色
  4. 支持HTML5的浏览器
  5. 大菠萝?Pinia已经来了,再不学你就out了
  6. 使用python调整图片大小
  7. 联想笔记本热键与IDEA快捷键冲突问题
  8. rsync来实现文件同步
  9. 图像处理:高斯滤波算法
  10. 【100 种语言速成】第 2 节:Emojicode
  11. UML图解和UML代码范例
  12. 福昕阅读器解除安全阅读模式
  13. 四信5G工业智能网关加速5G全连接智慧工厂落地 抢占生产“智”高点
  14. moodle mysql,Moodle: 查询任意数据库
  15. COA-2019-第十章 Error Correction
  16. js截取字符串的后几位数 省份证号*隐藏
  17. QT实现CSDN上传资源管理助手Demo之(3)请求上传资源页面并解析
  18. 个人对String,StringBuffer,StringBuilder的一些理解
  19. 保证金,杠杆和风险限额委托种类
  20. 2019中兴校招面经整理

热门文章

  1. 财务管理 viewthread.php,厦大2017mpacc:一些个人经验和感想
  2. 敏捷开发“松结对编程”系列之八:微软 Tech ed2011 自组织团队与松结对编程讲稿(敏捷开发)
  3. NodeJS笔记二---kalrry
  4. neovim as JavaScript IDE
  5. Mbus从站使用TSS721芯片通讯问题
  6. 一个“追跌卖涨”的股票筛选程序
  7. 安装JAVA SE/jdk后,未发现jdk/lib的tools.jar和dt.jar文件
  8. nodejs打包exe
  9. Git Cheat Sheet——Git的常用命令和最佳做法
  10. 电脑打不开文件服务器,Windows10系统任务栏打不开文件资源管理器的解决方法