oracle cube排序,Oracle rollup cube 用法
1、Oracle 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),…… 这样任意按自己想要的形式结合统计数据,非常方便。
2、实例
SQL> select grade,id,num from a;
GRADE ID NUM
---------- ---------- ----------
a 1 1
a 2 2
b 3 4
b 4 4
对grade字段进行rollup:
SQL> select grade,sum(num) from a group by rollup(grade);
GRADE SUM(NUM)
---------- ----------
a 3
b 8
11
同时对grade和id字段进行rollup
SQL> SELECT decode(grouping_id(grade,ID),2,'小计',3,'合计',grade) grade,
2 decode(grouping_id(grade,ID),1,'小计',3,'合计',ID) ID,
3 SUM(num)
4 FROM a GROUP BY ROLLUP(grade,ID)
5 /
GRADE ID SUM(NUM)
---------- ---------- ----------
a 1 1
a 2 2
a 小计 3
b 3 4
b 4 4
b 小计 8
合计 合计 11
7 rows selected
再看看先对grade分组,再对id进行rollup的情况:
SQL> SELECT grade,
2 decode(GROUPING(ID),1,'合计',ID) ID,
3 SUM(num)
4 FROM a GROUP BY grade,rollup(ID)
5 /
GRADE ID SUM(NUM)
---------- ---------- ----------
a 1 1
a 2 2
a 合计 3
b 3 4
b 4 4
b 合计 8
6 rows selected
这里GROUP BY grade,rollup(ID)跟你的理解应该很相近了,而且可以看出GROUP BY grade,rollup(ID)结果跟ROLLUP(grade,ID)很类似,只是少了最后1行总合计,但是也可以就看出rollup多个字段时并不是只有1个字段起作用的
可以认为你理解的是只对第一个字段的累计,跟GROUP BY grade,rollup(ID)的结果很接近,再看rollup3个字段的情况:
SQL> select part,grade,id,num from a;
PART GRADE ID NUM
---- ---------- ---------- ----------
p1 a 1 1
p1 a 2 2
p1 b 3 3
p1 b 4 4
p2 c 5 5
p2 d 6 6
6 rows selected
SQL>
SQL> SELECT decode(grouping_id(part,grade,ID),7,'总计',part) part,
2 decode(grouping_id(part,grade,ID),3,'小计',7,'总计',grade) grade,
3 decode(grouping_id(part,grade,ID),1,'小计',3,'小计',7,'总计',ID) ID,
4 SUM(num)
5 FROM a GROUP BY ROLLUP(part,grade,ID)
6 /
PART GRADE ID SUM(NUM)
---- ---------- ---------- ----------
p1 a 1 1
p1 a 2 2
p1 a 小计 3
p1 b 3 3
p1 b 4 4
p1 b 小计 7
p1 小计 小计 10
p2 c 5 5
p2 c 小计 5
p2 d 6 6
p2 d 小计 6
p2 小计 小计 11
总计 总计 总计 21
13 rows selected
这里不光只对第一个字段做了累计,先按(part,grade,ID)分组累计,然后按(part,grade)分组累计,再按(part)分组累计,最后累计全部
再看看rollup 和 cube的区别:
对于ROLLUP(part,grade,ID),grouping_id(part,grade,ID)的值范围在(0,1,3,7)间即
part,grade,ID(作为合计时计为1)
0,0,0
0,0,1
0,1,1
1,1,1
而对于cube(part,grade,ID),grouping_id(part,grade,ID)的值范围在0-7之间即
part,grade,ID(作为合计时计为1)
0,0,0
0,0,1
0,1,0
0,1,1
1,0,0
1,0,1
1,1,0
oracle cube排序,Oracle rollup cube 用法相关推荐
- [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)
原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...
- oracle cube排序,Oracle命令CUBE
Oracle基本命令:GROUP BY CUBE(字段列表):CUBE命令根据字段列表,生成不同的排列组合,并根据每一种组合结果,生成统计汇总.比 Oracle基本命令:GROUP BY CUBE(字 ...
- oracle进行排序,oracle排序的几种方法
1.创建数据库表 CREATE TABLE USER_INFO ( USERID VARCHAR2(10 BYTE) NOT NULL, USERNAME ...
- oracle listagg 排序,oracle 行转列 listagg与wm_concat
wm_concat 和listagg 函数都可以实现对(单个或组合)列的合并,也可以看成是对某一列的"SUM",这俩个函数功能相同,listagg是在11.2的版本中才首次出现的, ...
- oracle 二级排序,Oracle基础(二)之排序(order by)、限定查询(where)
一.排序 1.使用order by关键字 放在select子句最后面 2.升序ASC 默认为升序 降序DESC 3.order by 需要排序的字段 排序规则 4.order by 后可以跟字段也可 ...
- oracle rollup 排序,Oracle分组函数之ROLLUP用法
rollup函数 本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种 环境准备 create table dept as s ...
- oracle分类函数总结,Oracle分组函数之ROLLUP的基本用法
rollup函数 本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种 环境准备 create table dept as s ...
- oracle字符串排序
oracle字符串排序 oracle字符串排序 oracle字符串数字部分排序 oracle字符串排序 select * from table order by to_number(id) oracl ...
- 【转】【CUBE】Oracle分组函数之CUBE魅力
[转][CUBE]Oracle分组函数之CUBE魅力 http://blog.itpub.net/519536/viewspace-610997/ Oracle的CUBE与ROLLUP功能很相似,也是 ...
最新文章
- hdu 1312	Red and Black 解题报告
- BootStrap 智能表单系列 五 表单依赖插件处理
- linux 爬虫工具,技术|如何在Ubuntu 14.04 LTS安装网络爬虫工具:Scrapy
- 成功解决SQL Server软件中出现的18456问题
- Python 计算机视觉(五)—— OpenCV 进行图像几何变换
- ProtoBuf在使用protoc进行编译时提示: Required fields are not allowed in proto3
- 通过History Trends Unlimited通过统计服务器上Chrome浏览器Top10网页历史访问量(2021.11.23)
- s1机试补考补习 9206
- 如何理解《瓦尔登湖》?
- Elasticsearch实践(二)linux安装
- MVVM 自动生成编号
- 电话系统服务器,局域网电话系统的两种解决方案——是否需要I
- python response重头开始_用 Python 抓取公号文章保存成 PDF
- iText和flying saucer结合生成pdf--显示分页页码
- Spring 注解配置(2)——@Autowired
- 操作系统 内存分配-分区
- 《系统工程理论与实践》Latex 模板使用教程
- 基于Hololens开发---本地化空间锚点
- 区块链技术及其在信息安全领域的研究进展 简单概括
- 基于unity3D的趣味桌球游戏开发
热门文章
- 12c oracle 修改内存_Oracle12c中性能优化功能增强新特性之重大突破——内存列存储新特性...
- ai作文批改_英语写作怎么提升?讯飞智能学习机AI作文批改带你实战练习
- 根据title 关闭cmd 窗口_2种Win7关闭休眠功能方法
- Selenium3自动化测试——4. 获取百度备案信息
- Mysql备机复制到主机_mysql主从复制的实现
- 简书python自动化运维_简明Python开发教程(4):网络自动化运维的曙光
- HTML自动换页相册,html版电子相册翻书特效
- java和c++的区别大吗_安徽成人高考和自考区别大吗?为什么推荐选成人高考?
- 【Spring注解驱动开发】自学java和三大框架要多久
- java读取pdf文件流,系列篇