本文通过例子展示sum, rollup, cube, grouping的用法。

//首先建score表

create table score(
class  nvarchar2(20),
course   nvarchar2(20),
stu_no  number(5),
stu_name nvarchar2(20),
score   number(2));

//插入数据

insert into score values ('Class_A','Math',10001,'Tough1',95);
insert into score values ('Class_A','Math',10002,'Tough2',93);
insert into score values ('Class_B','Math',10003,'Tough3',94);
insert into score values ('Class_B','Math',10004,'Tough4',88);
insert into score values ('Class_A','Computer',10001,'Tough1',89);
insert into score values ('Class_A','Computer',10002,'Tough2',98);
insert into score values ('Class_B','Computer',10003,'Tough3',89);
insert into score values ('Class_B','Computer',10004,'Tough4',87);

SELECT * FROM score;

CLASS COURSE STU_NO STU_NAME SCORE
Class_A Math 10001 Tough1 95
Class_A Math 10002 Tough2 93
Class_B Math 10003 Tough3 94
Class_B Math 10004 Tough4 88
Class_A Computer 10001 Tough1 89
Class_A Computer 10002 Tough2 98
Class_B Computer 10003 Tough3 89
Class_B Computer 10004 Tough4 87
  • sum函数

按class,course分组,然后对score统计总合

select class,course,sum(score)/count(*) "AVG_SCORE"
from score
group by class,course;

CLASS COURSE AVG_SCORE
Class_B Math 91
Class_A Computer 93.5
Class_A Math 94
Class_B Computer 88
  • rollup函数

先按class,course分组汇总;再按class分组汇总;最后全表分组汇总

select class,course,sum(score)/count(*) "AVG_SCORE"
from score
group by rollup(class,course);

CLASS COURSE AVG_SCORE
Class_A Math 94
Class_A Computer 93.5
Class_A   93.75
Class_B Math 91
Class_B Computer 88
Class_B   89.5
    91.625
  • cube函数

先按class,course分组汇总;再按class分组汇总;再按course分组汇总;最后全表分组汇总

select class,course,sum(score)/count(*) "AVG_SCORE"
from score
group by cube(class,course)
order by class,course nulls last;

CLASS COURSE AVG_SCORE
Class_A Computer 93.5
Class_A Math 94
Class_A   93.75
Class_B Computer 88
Class_B Math 91
Class_B   89.5
  Computer 90.75
  Math 92.5
    91.625

rollup和cube区别:

ROLLUP(A,B,C)的话,GROUP BY顺序
(A,B,C)
(A,B)
(A)
最后对全表进行GROUP BY操作。

GROUP BY CUBE(A, B, C),GROUP BY顺序
(A,B,C)
(A,B)
(A,C)
(A),
(B,C)
(B)
(C),
最后对全表进行GROUP BY操作。

  • grouping函数

rollup和cube函数都会对结果集产生null,这时候可用grouping函数来确认该记录是由哪个字段得出来的。grouping函数用法,带一个参数,参数为字段名,结果是根据该字段得出来的就返回1,反之返回0

select decode(grouping(class), 1, 'All Class', class) "CLASS",
         decode(grouping(course), 1, 'All Course', course) "COURSE",
         sum(score) / count(*) "AVG_SCORE"
from   score
group  by cube(class, course)
order  by class, course nulls last;

CLASS COURSE AVG_SCORE
All Class All Course 91.625
All Class Computer 90.75
All Class Math 92.5
Class_A All Course 93.75
Class_A Computer 93.5
Class_A Math 94
Class_B All Course 89.5
Class_B Computer 88
Class_B Math 91

Oracle分析函数 — sum, rollup, cube, grouping用法的更多相关文章

  1. [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)

    原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...

  2. 高级聚合函数rollup(),cube(),grouping sets()

       rollup(),cube(),grouping sets()   上面这几个函数,是对group by分组功能做的功能扩展. a.rollup()   功能:在原结果基础上追加一行总合计记录 ...

  3. oracle group by rollup,decode,grouping,nvl,nvl2,nullif,grouping_id,group_id,grouping sets,RATIO_TO

    干oracle 047文章12当问题,经验group by 声明.因此邂逅group by  rollup,decode,grouping,nvl,nvl2,nullif,RATIO_TO_REPOR ...

  4. GROUP BY中ROLLUP/CUBE/GROUPING/GROUPING SETS使用示例

    oracle group by中rollup和cube的区别: Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句.CUBE ROLLUP 是用于统计数据的. 实验 ...

  5. Oracle Group by+rollup+cube 的应用

    首先我们创建一个示例表: Create table test_group (v_name varchar2(4) ,v_size varchar2(4) ,v_color varchar2(4) ,n ...

  6. Oracle分析函数 — rank, dense_rank, row_number用法

    本文通过例子演示了Oracle分析函数 —— rank, dense_rank, row_number的用法. //首先建score表 create table score( course   nva ...

  7. Oracle分析函数——函数列表

    --------------聚合函数 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算 ...

  8. Oracle分析函数大全

    分析函数又叫开窗函数,OLAP函数等,因为有人问我用过开窗函数没,呵,什么是开窗函数,从来没听过,难道是分析函数么.哈哈,最后还真是分析函数哦!用过的东西别名也应该知道,赶上这么个事,就剽窃一眼Ora ...

  9. Oracle 分析函数的使用(主要是rollup用法)

    分析函数是oracle 8.1.6中就引入的一个全新的概念,为我们分析数据提供了一种简单高效的处理方式.在分析函数出现以前,我们必须使用自联查询,子查询或者内联视图,甚至复杂的存储过程实现的语句,现在 ...

随机推荐

  1. linux -cp/mv

    cp 复制 -r文件夹 -f强制没有提示 mv 移动改名 mv test.py temp/test2.py移动(后面只加路径就是移动.路径+文件名就是移动+改名) 执行mv一般会执行  mv -i交互 ...

  2. hdu 4630 树状数组

    思路:这题的处理方式和hdu4358有点像.我们用一个pre[x]表示约数x的倍数上次出现的位置,将查询按区间的右节点升序排序.num[i]的约数为j,如果pre[j]为0,就将pre[j]置为i;否 ...

  3. 203. Segment Tree Modify

    最后更新 二刷 08-Jan-2017 利用线段树来更改,找到更改的NODE,然后更改那个brach上的所有max值. 首先确定recursion的终止条件 然后通过判断大小来找方向 找到NODE之后 ...

  4. C#电脑自动关机代码指令

    Process p = new Process();//实例化一个独立进程                p.StartInfo.FileName = "cmd.exe";//进程 ...

  5. Ehcache(2.9.x) - API Developer Guide, Blocking and Self Populating Caches

    About Blocking and Self-Populating Caches The net.sf.ehcache.constructs package contains some applie ...

  6. Transaction Script模式

    Transcation Script模式适合于小项目,维护量小的项目. 好比cs文件中有一个主方法,调用了本文件中的其他方法,如果说不需要怎么维护的话Tranacation Script模式就可以了, ...

  7. 用sinopia搭建npm私服

    需求(这段话是摘抄参考文档的,因为作者也想这么说): 公司出于自身隐私保护需要,不想把自己的代码开源到包管理区,但是又急需一套完整包管工具,来管理越来越多的组件.模块和项目.对于前端,最熟悉的莫过于n ...

  8. maven入门程序(3)

    欢迎转载交流:http://www.cnblogs.com/shizhongtao/p/3472864.html 这里我将展示如何用maven快速创建一个基于spring的web框架.创建步骤和上一篇 ...

  9. JBoss部署项目log4j配置会造成死锁问题,浏览器访问一直pending状态

    今天将项目部署到JBoss服务器上,部署成功后,浏览器访问页面一直在等待响应. 查了很长时间,最后在服务器上通过jstack pid命令查看Java堆栈信息,发现了有两个线程死锁. 看到造成死锁的原因 ...

  10. SMB/CIFS协议解析二

    一.拷贝文件(远程-->本地) 1.SMB_COM_NT_CREATE_ANDX (0xa2)       打开文件,获取文件名,获得读取文件的  总长度. 2.SMB_COM_READ     ...