Oracle分析函数 — sum, rollup, cube, grouping用法
本文通过例子展示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用法的更多相关文章
- [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)
原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...
- 高级聚合函数rollup(),cube(),grouping sets()
rollup(),cube(),grouping sets() 上面这几个函数,是对group by分组功能做的功能扩展. a.rollup() 功能:在原结果基础上追加一行总合计记录 ...
- 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 ...
- GROUP BY中ROLLUP/CUBE/GROUPING/GROUPING SETS使用示例
oracle group by中rollup和cube的区别: Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句.CUBE ROLLUP 是用于统计数据的. 实验 ...
- Oracle Group by+rollup+cube 的应用
首先我们创建一个示例表: Create table test_group (v_name varchar2(4) ,v_size varchar2(4) ,v_color varchar2(4) ,n ...
- Oracle分析函数 — rank, dense_rank, row_number用法
本文通过例子演示了Oracle分析函数 —— rank, dense_rank, row_number的用法. //首先建score表 create table score( course nva ...
- Oracle分析函数——函数列表
--------------聚合函数 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算 ...
- Oracle分析函数大全
分析函数又叫开窗函数,OLAP函数等,因为有人问我用过开窗函数没,呵,什么是开窗函数,从来没听过,难道是分析函数么.哈哈,最后还真是分析函数哦!用过的东西别名也应该知道,赶上这么个事,就剽窃一眼Ora ...
- Oracle 分析函数的使用(主要是rollup用法)
分析函数是oracle 8.1.6中就引入的一个全新的概念,为我们分析数据提供了一种简单高效的处理方式.在分析函数出现以前,我们必须使用自联查询,子查询或者内联视图,甚至复杂的存储过程实现的语句,现在 ...
随机推荐
- AES 加解密
// // NSData+AES.h // Smile // // Created by 蒲晓涛 on 12-11-24. // Copyright (c) 2012年 BOX. All rights ...
- 属性声明(property declarations), 自定义属性,自动生成 get 和 set 方法,getter 和 setter
属性声明(property declarations), 自定义属性,自动生成 get 和 set 方法,getter 和 setter 一.普通的get 和set 属性. 一般的get 和set 属 ...
- [改善Java代码]推荐使用String直接量赋值
建议52:推荐使用String直接量赋值 一.建议 String对象的生成方式有两种: 1.通过new关键字生成,String str3 = new String(“中国”); 2.直接声明,如:St ...
- [改善Java代码]用偶判断,不用奇判断
建议21: 用偶判断,不用奇判断 public class Client { public static void main(String[] args) { Scanner in = new Sca ...
- Apache ab 测试工具使用(一)
简述: 试用apache ab测试工具 下载点 http://httpd.apache.org/download.cgi 参考: http://jingyan.baidu.com/article/e3 ...
- JMS - Exceptions
The JMSException JMS defines JMSException as the root class for exceptions thrown by JMS methods. JM ...
- VR开发中性能问题—OculusWaitForGPU
http://blog.csdn.net/cartzhang/article/details/50788894 VR开发中性能问题-OculusWaitForGPU 本文章由cartzhang编写,转 ...
- Hibernate+DWR无刷新三级联动
DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在 ...
- Crontab使用mailx的一点发现
要用到Crontab定时任务去执行一个Shell脚本监控Linux系统资源并且当一些数字超过预设的话发送邮件警告.首先是linux的sendmail功能无法满足我们使用SMTP服务器并且指定发送者(E ...
- AjaxPro使用方法
无意中看到同事用AjaxPro用,看到很不错,特长是前后台传输数据特别方便. 最好的教材就是拿到就可以用,方便大家. 以前数据传输用FORM提交,或者在前台用JASON拼接然后通过AJAX方式提交.总 ...