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,‘小徐‘,‘数学‘,98);
 3 Insert Into score values (001,‘小徐‘,‘外语‘,99);
 4 Insert Into score values (002,‘小吴‘,‘语文‘,80);
 5 Insert Into score values (002,‘小吴‘,‘数学‘,74);
 6 Insert Into score values (002,‘小吴‘,‘外语‘,65);
 7 Insert Into score values (003,‘小张‘,‘语文‘,89);
 8 Insert Into score values (003,‘小张‘,‘数学‘,78);
 9 Insert Into score values (003,‘小张‘,‘外语‘,84);
10 Insert Into score values (004,‘小孙‘,‘语文‘,100);
11 Insert Into score values (004,‘小孙‘,‘数学‘,100);
12 Insert Into score values (004,‘小孙‘,‘外语‘,100);
13 Insert Into score values (001,‘小彭‘,‘语文‘,87);
14 Insert Into score values (001,‘小彭‘,‘数学‘,99);
15 Insert Into score values (001,‘小彭‘,‘外语‘,65);
16 Insert Into score values (004,‘小叶‘,‘语文‘,100);
17 Insert Into score values (004,‘小叶‘,‘数学‘,100);
18 Insert Into score values (004,‘小叶‘,‘外语‘,100);
19 Insert Into score values (003,‘小刘‘,‘语文‘,79);
20 Insert Into score values (003,‘小刘‘,‘数学‘,90);
21 Insert Into score values (003,‘小刘‘,‘外语‘,65);
22 Insert Into score values (002,‘小童‘,‘语文‘,96);
23 Insert Into score values (002,‘小童‘,‘数学‘,93);
24 Insert Into score values (002,‘小童‘,‘外语‘,97);

普通分组函数,统计每个班级的总分:

Select t.Classid, Sum(t.Score) From Score t Group By t.Classid;

查询结果:

加上Rollup,统计每个班级的总分和所有班级的总分:

Select t.Classid, Sum(t.Score) From Score t Group By Rollup(t.Classid);

查询结果:

先进行无字段的聚合(1),再对Classid聚合(3),相当于:

1 Select Null, Sum(t.Score) From Score t
2 Union All
3 Select t.Classid, Sum(t.Score) From Score t Group By t.Classid;

在看看两个字段的,统计每个班级的总分、所有班级的总分和每个学生的总成绩:

Select t.classid,t.studentname,Sum(t.score) From Score t Group By Rollup(t.classid,t.studentname); 

查询结果:

先进行无字段的聚合(1),再对Classid聚合(3),在对Classid和Studentname组合聚合,相当于:

1 Select Null, Null, Sum(t.Score) From Score t
2 Union All
3 Select t.Classid, Null, Sum(t.Score) From Score t Group By t.Classid
4 Union All
5 Select t.Classid, t.Studentname, Sum(t.Score) From Score t Group By t.Classid, t.Studentname
时间: 2024-10-10 09:31:38

Oracle分组函数之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分组函数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 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

[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

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

Oracle——分组函数

AVG(平均值)和 SUM (合计)函数 可以对数值型数据使用AVG 和 SUM 函数. AVG组函数忽略空值 --在组函数中使用NVL函数 --求平均值 sum(expr)/count(nvl(expr,0)) MIN(最小值)和 MAX(最大值)函数 可以对任意数据类型的数据使用 MIN 和 MAX 函数. SELECT MIN(hire_date), MAX(hire_date) FROM employees; COUNT(*) 返回表中记录总数,适用于任意数据类型. SELECT COU