GROUP BY ROLLUP和CUBE 用法

ROLLUP和CUBE 用法     
      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操作。

如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。

grouping_id()可以美化效果。除了使用GROUPING函数,还可以使用GROUPING_ID来标识GROUP BY的结果。

也可以 Group by Rollup(A,(B,C)) ,Group by A Rollup(B,C),…… 这样任意按自己想要的形式结合统计数据,非常方便。

Rollup():分组函数可以理解为group by的精简模式,具体分组模式如下:

  Rollup(a,b,c): (a,b,c),(a,b),(a),(全表)

Cube():分组函数也是以group by为基础,具体分组模式如下:

  cube(a,b,c):(a,b,c),(a,b),(a,c),(b,c),(a),(b),(c),(全表)

DROP TABLE TEST_GROUPBY 

CREATE TABLE TEST_GROUPBY(
ClassName          nvarchar(20),   --班级
StudentName        nvarchar(20),   --姓名
SubjectName        nvarchar(20),   --科目
Scores             INT             --分数
)

DELETE FROM TEST_GROUPBY

INSERT INTO TEST_GROUPBY SELECT ‘高一(1)班‘,‘王小贱‘,‘数学‘,10
INSERT INTO TEST_GROUPBY SELECT ‘高一(1)班‘,‘王小贱‘,‘英语‘,10
INSERT INTO TEST_GROUPBY SELECT ‘高一(2)班‘,‘李神瑛‘,‘英语‘,10
INSERT INTO TEST_GROUPBY SELECT ‘高一(2)班‘,‘董昕辰‘,‘英语‘,10

SELECT ClassName,StudentName,SubjectName,SUM(Scores) AS Scores
FROM   TEST_GROUPBY
GROUP BY ROLLUP (ClassName,StudentName,SubjectName)

SELECT ClassName,StudentName,SubjectName,SUM(Scores) AS Scores
FROM   TEST_GROUPBY
GROUP BY ROLLUP (ClassName,(StudentName,SubjectName))

SELECT ClassName,StudentName,SubjectName,SUM(Scores) AS Scores
FROM   TEST_GROUPBY
GROUP BY ROLLUP ((ClassName,StudentName),SubjectName)

SELECT ClassName,StudentName,SubjectName,SUM(Scores) AS Scores
FROM   TEST_GROUPBY
GROUP BY cube (ClassName,StudentName,SubjectName)

  

时间: 2024-08-07 08:39:21

GROUP BY ROLLUP和CUBE 用法的相关文章

Oracle中group by 的扩展函数rollup、cube、grouping sets

Oracle的group by除了基本用法以外,还有3种扩展用法,分别是rollup.cube.grouping sets,分别介绍如下: 1.rollup 对数据库表emp,假设其中两个字段名为a,b,c. 如果使用group by rollup(a,b),首先会对(a,b)进行group by ,然后对 a 进行 group by ,最后对全表进行 group by 操作. 如下查询结果: 查询语句 Select deptno,job,sum(sal) from emp group by r

[Oracle] Group By 语句的扩展 - Rollup、Cube和Grouping Sets

常常写SQL语句的人应该知道Group by语句的主要使用方法是进行分类汇总,以下是一种它最常见的使用方法(依据部门.职位分别统计业绩): SELECT a.dname,b.job,SUM(b.sal) sum_sal FROM dept a,emp b WHERE a.deptno = b.deptno GROUP BY a.dname,b.job; DNAME JOB SUM_SAL -------------- --------- ---------- SALES MANAGER 2850

Group By 多个分组集小结 --GROUPING SETS,GROUP BY CUBE,GROUP BY ROLLUP,GROUPING(),GROUPING_ID()

T-SQL 多个分组集共有三种 GROUPING SETS, CUBE, 以及ROLLUP, 其中 CUBE和ROLLUP可以当做是GROUPING SETS的简写版 示例数据库下载: http://files.cnblogs.com/files/haseo/TSQL2012.rar GROUPING SETS 列出所有你设置的分组集 SELECT shipperid, YEAR(shippeddate) AS shipyear, COUNT(*) AS numorders FROM Sales

高级分组group by 、 group by cube、 group by rollup 使用说明

1.分别以job和deptno分组求和select sum(sal),job,deptno from emp group by grouping sets(job,deptno); 2.2^n-1分组(n表示列的数量,如果有括号里面的括起来的多个列算一个列 举例:cube((a,b),c)n=2;cube(a,b) n=2;select sum(sal) ,deptno,job from emp group by cube(deptno,job);cube__>2^n      --group

SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE

原文:SQL Server 之 GROUP BY.GROUPING SETS.ROLLUP.CUBE 1.创建表 Staff CREATE TABLE [dbo].[Staff]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [varchar](50) NULL, [Sex] [varchar](50) NULL, [Department] [varchar](50) NULL, [Money] [int] NULL, [CreateDate] [date

Oralce 高级 sql 之 rollup 与 cube

在 oracle sql 查询中,oracle 提供了一些高级功能能够简化 sql 查询语句以及提高查询性能.下面将介绍 rollup,cube的用法与区别. 1. rollup rollup 能够在 select 语句中计算指定分组字段的多个层次的小计以及合计. rollup 非常容易使用并且非常高效. rollup 从右到左扫描分组字段, 逐步创建更高级别的小计. 最后再创建一行总计. rollup 将创建 n + 1 个层次(级别)的小计, n 指的是 rollup 中的字段数. 1.1

SQL server 关于 GROUP BY 详细讲解和用法

1. Group By 语句简介: Group By语句从英文的字面意义上理解就是"根据(by)一定的规则进行分组(Group)".它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理. P.S. 这里真是体会到了一个好的命名的力量,Group By从字面是直接去理解是非常好理解的.恩,以后在命名的环节一定要加把劲:).话题扯远了. 2. Group By 的使用: 上面已经给出了对Group By语句的理解.基于这个理解和SQL Server 2

oracle中分组中的ROLLUP和CUBE选项

在进行多列分组统计时,如果直接使用GROUP BY子句指定分组列,则只能生成基于所有分组列的统计结果.如果在GROUP BY子句中使用ROLLUP语句或CUBE语句,除了生成基于所有指定列的分组统计外,还可以生成基于指定列不同子集的统计结果.使用ROLLUP选项,除了生成基于所有指定列的分组统计外,还对指定的分组列从左开始的每个子集进行统计.例如,GROUP BY ROLLUP(A,B,C)形成的统计包括以下内容.?GROUP BY():不基于任何列的整个查询结果的统计.?GROUP BY A:

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_REPORT等一下. 1. decode  与if...then,case...when...这类流数据语句功能差点儿相同 decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义例如以下: IF 条件=值1 THEN RETURN(值1) ELSIF 条件=值2 TH