Rollup Cube Grouping Set使用总结

以上三种在数据汇总统计时经常用到,我尝试以简明易懂地总结出其使用方法和意义


GROUP BY ROLLUP(c1,c2,c3...cN) 分级汇总

1. 汇总从左到右逐级降低,最精细的汇总数据是根据最右的列得到

2.  根据c1得到全部汇总->再根据c2细分汇总->...->根据cN得到最精细汇总。

采购进货表Purchase(货品ID,数量,价格,类型,日期,供应商 )

SELECT MONTH(日期),类型,供应商 ,SUM( 价格)

FROM Purchase

GROUP BY ROLLUP(MONTH(日期),类型,供应商)

汇总的条件包括4种:

(所有),(MONTH(日期)),(MONTH(日期),类型),(MONTH(日期),类型,供应商)

条件对应的结果集:

得到总采购额汇总,根据日期得到每月采购额汇总,各个月中不同类型商品的采购额的单项汇总,每月中每个类型的商品分别由不同供应商的供货额。

GROUP BY CUBE(c1,c2,c3...Cn) 获取所有聚合值的超集,换句话说,就是生成的结果集包括所有可能的聚合情况(所有维度)

SELECT MONTH(日期),类型,供应商 ,SUM( 价格)

FROM Purchase

GROUP BY CUBE(MONTH(日期),类型,供应商)

汇总条件包括7种:

(所有),(MONTH(日期)),(类型),(供应商),(MONTH(日期),类型),

(MONTH(日期),供应商),(类型,供应商)
条件对应结果集包括:

采购总额的汇总,各个月份的采购额汇总,各类型商品的采购额汇总,不同供应商的采购总额,每个月不同类型商品的采购额,每个月不同供应商的采购额,每个类型商品不同供应商的采购额。

GROUP BY GROUPING SETS(c1,c2,c3...cN)指定不同的汇总列,合并结果到一个结果集。类似多个汇总结果用UNION ALL拼起来。

SELECT MONTH(日期),类型,供应商 ,SUM( 价格)

FROM Purchase

GROUP BY  GROUPING SETS(MONTH(日期),类型,供应商)

()条件表示,所有汇总。还可以将多个列组合成一个分组条件,如((c1,c2),c3)

汇总条件:

(MONTH(日期)),(类型),(供应商),分别得到结果,然后合并到一个返回结果集中。

意义:

一个结果集输出,多个分组汇总的合并结果集。各月采购额+各类型商品采购额+各供应商采购额。

时间: 2024-11-07 04:45:07

Rollup Cube Grouping Set使用总结的相关文章

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

rollup(),cube(),grouping sets() 上面这几个函数,是对group by分组功能做的功能扩展. a.rollup() 功能:在原结果基础上追加一行总合计记录 rollup(字段1,字段2)会追加按字段1进行的合计记录, 最后再追加一个总合计记录 select deptno,count(*) from emp group by rollup(deptno); select deptno,job,count(*) from emp group by rollup(dept

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

原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用法,这些函数可以理解为GroupBy分组函数封装后的精简用法,相当于多个union all 的组合显示效果,但是要比 多个union all的效率要高. 其实这些函数在时间的程序开发中应用的并不多,至少在我工作的多年时间中没用过几次,因为现在的各种开发工具/平台都自带了这些高级分组统计功能,使用的方

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

rollup&&cube

group by 擴展 rollup&&cube --按job分組計算不同job的匯總工資 SELECT job, SUM (sal)     FROM emp GROUP BY job ORDER BY job; --向rollup傳遞一列 SELECT job, SUM (sal)     FROM emp GROUP BY ROLLUP (job) ORDER BY job; --向rollup傳遞多列,根據job小計 SELECT job, deptno, SUM (sal)   

oracle group by rollup decode grouping nvl等判断或者小计合计心得

在做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 THEN RETU

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

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 高级分组

oracle 高级分组 博客分类: 数据库基础 oraclesql Java代码   10.高级分组 本章目标: 对于增强的group by需要掌握: 1.使用rollup(也就是roll up累计的意思)操作产生subtotal(小计)的值. 2.使用cube操作产生cross-tabulation(列联交叉表)的值. 3.使用grouping函数标识通过rollup和cube建立的行的值. 4.使用grouping sets产生一个single result set(结果集). 5.使用gr

SQL 总结

1. select 使用正则表达式 正则表达式的模式串, 与linux基本相同, oracle提供以下4个函数来支持正则表达式: REGEXP_LIKE: 比较一个字符串是否与正则表达式匹配(看来是返回true, false) (srcstr, pattern) select * from test where regexp_like(column_name, '^[0-9]+$'); REGEXP_REPLACE: 搜索并替换匹配的正则表达式(srcstr, pattern[,replaces