Oracle分组函数cube VS rollup

分析函数cube和rollup魅力
首先请看下面例子
1)创建表
create table group_test (group_id int, job varchar2(10), name varchar2(10), salary int);
2)初始化表
insert into group_test values (10,‘Coding‘, ‘Bruce‘,1000);
insert into group_test values (10,‘Programmer‘,‘Clair‘,1000);
insert into group_test values (10,‘Architect‘, ‘Gideon‘,1000);
insert into group_test values (10,‘Director‘, ‘Hill‘,1000);

insert into group_test values (20,‘Coding‘, ‘Jason‘,2000);
insert into group_test values (20,‘Programmer‘,‘Joey‘,2000);
insert into group_test values (20,‘Architect‘, ‘Martin‘,2000);
insert into group_test values (20,‘Director‘, ‘Michael‘,2000);

insert into group_test values (30,‘Coding‘, ‘Rebecca‘,3000);
insert into group_test values (30,‘Programmer‘,‘Rex‘,3000);
insert into group_test values (30,‘Architect‘, ‘Richard‘,3000);
insert into group_test values (30,‘Director‘, ‘Sabrina‘,3000);

insert into group_test values (40,‘Coding‘, ‘Samuel‘,4000);
insert into group_test values (40,‘Programmer‘,‘Susy‘,4000);
insert into group_test values (40,‘Architect‘, ‘Tina‘,4000);
insert into group_test values (40,‘Director‘, ‘Wendy‘,4000);

commit;

select t.group_id, sum(t.salary) from group_test t group by t.group_id order by 1;

3)查看rollup函数
select t.group_id, sum(t.salary) from group_test t group by rollup(t.group_id)order by 1;

select t.group_id,job,  sum(t.salary) from group_test t group by rollup(t.group_id,job) order by 1;

4)查看cube函数
select t.group_id, sum(t.salary) from group_test t group by cube(t.group_id)order by 1;

由此可见rollup以及cude函数是group by函数的扩展,方便用来做小计的分析函数
仔细观察两个函数的细微差别
rollup(a,b)   统计列包含:(a,b)、(a)、()
rollup(a,b,c) 统计列包含:(a,b,c)、(a,b)、(a)、()
……以此类推ing……

cube(a,b)     统计列包含:(a,b)、(a)、(b)、()
cube(a,b,c)   统计列包含:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、(c)、()
……以此类推ing……
 
替换成原始的group by字句实际就是union all了不区分ID的一个小汇总。

时间: 2024-10-11 14:33:54

Oracle分组函数cube VS rollup的相关文章

[转]【ROLLUP】Oracle分组函数之ROLLUP魅力

原创:http://blog.itpub.net/519536/viewspace-610995 本文通过演示给出Oracle ROLLUP分组函数的用法,体验一下Oracle在统计查询领域中的函数魅力.ROLLUP分组函数可以理解为Group By分组函数封装后的精简用法,这里同时给出ROLLUP的Group By的改写思路. 1.初始化实验坏境1)创建测试表group_test[email protected]> create table group_test (group_id int,

Oracle分组函数之ROLLUP

功能介绍: 首先是进行无字段的聚合,然后在对字段进行从左到右依次组合后聚合 创建表: 1 Create Table score 2 ( 3 classID Int, 4 studentName Varchar2(50), 5 subject varchar2(50), 6 score Int 7 ); 插入测试数据: 1 Insert Into score values (001,'小徐','语文',87); 2 Insert Into score values (001,'小徐','数学',9

PLSQL_基础系列2_分组函数GROUP BY / ROLLUP / CUBE

2014-11-30 BaoXinjian 一.摘要 ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集. 1. 下面是 CUBE 和 ROLLUP 之间的具体区别: CUBE 生成的结果集显示了所选列中值的所有组合的聚合. ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合. 2. ROLLUP 优点: (1). ROLLUP 返回单个结果集,而 COMPUTE BY 返回多个结果集,而多个结果集会增加应用程序代码的复杂性. (2). ROLLUP 可以在服务器游

ORACLE分组函数stddev和variance,我心存的疑问

方差函数VARIANCE(x),具体方法是: 设方差s,a为x1,x2...xn的平均值 ,则s = [(x1-a)^2+(x2-a)^2+(x3-a)^2+--(xn-a)^2]/n 标准差函数STDDEV(x),具体算法是: 方差开方.设标准查为& ,则 &^2 = s 但是我通过以下的实验,发现oracle是这样计算variance()的, s = [(x1-a)^2+(x2-a)^2+(x3-a)^2+--(xn-a)^2]/n-1 ,注意不是除以n,而是n-1 ---------

oracle分组函数

分组函数:作用于一组值,并对一组数据返回一个值: 分组函数的使用: 常用的分组函数: Avg(求平均值),sum(求总和),min(求最小值),max(求最大值),count(求总个数),wm_concat(行转列) 例:select count( distinct deptno) from emp ; 行转列: select deptno 部门号,wm_concat(ename) 部门中员工的名字  from emp group by deptno; ---------------------

oracle 分组函数、视图

组函数 分组函数作用于一组数据,对每一组返回一个值 组函数类型: 1.计数        count(列名 或 表达式)     对满足的行数进行统计 2.求和        sum(列名 或 表达式)       对数据进行和值计算,如 sum(grade) 计算总成绩 3.平均值    avg(列名 或 表达式)        对数据进行均值计算,如avg(grade)计算平均成绩 4.最大值    max(列名 或 表达式)       筛选最大的数据,如max(sum(grade))筛选

Oracle分组函数之CUBE

功能介绍: 首先是进行无字段的聚合,然后依次对每个字段进行聚合 创建表: 插入测试数据: ROLLUP: Select t.classid,t.studentname,Sum(t.score) From Score t Group By Rollup(t.classid,t.studentname); 查询结果: Cube: Select t.classid,t.studentname,Sum(t.score) From Score t Group By Cube(t.classid,t.stu

[SQL]-Oracle分组函数ROULLUP的应用

首先部分说明: Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句.如果是Group by ROLLUP(A, B, C)的话,首先会对(A.B.C)进行GROUP BY,然后对(A.B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作. 因工作要做个报表,因此想就在数据库直接跑个报表出来,取公司部分数据整理如下: SELECT CLP.ITEMNAME AS PORVINCE, CLC.ITEMNAME AS CIT

Oracle分组函数之Grouping Sets

功能介绍: 自定义分组的字段 创建表: 插入测试数据: Grouping Sets(null,t.classid,(t.classid,t.studentname)),类似于ROLLUP Select t.classid,t.studentname,Sum(t.score) From Score t Group By Grouping Sets(null,t.classid,(t.classid,t.studentname)); 查询结果: Grouping Sets(null,t.classi