Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。
如果是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操作。
1. 普通的group by
select trade_date, deal_type, sum(turnover) from test t where t.trade_date >= date '2013-08-10' group by trade_date, deal_type;
2. 使用group by rollup()单列
select trade_date, sum(turnover) from test t where t.trade_date >= date '2013-08-10' group by rollup(trade_date);
可以看到,在最后一行做了汇总。
3. 使用group by rollup()多列
select trade_date, deal_type, sum(turnover) from test t where t.trade_date >= date '2013-08-10' group by rollup(trade_date, deal_type);
从上图可以看到:
#1.根据trade_date做了汇总;
#2.最后一行做了总的汇总。
按照rollup()的语法,是不会对deal_type做group by的。上面的SQL做了(trade_date,deal_type)的group by;(trade_date)的group by;以及对全表进行group by 操作。
如果是rollup()3列呢?
select trade_date, deal_type, deal_sub_type, sum(turnover) from test t where t.trade_date >= date '2013-08-10' group by rollup(deal_type, trade_date, deal_sub_type) order by 1, 2, 3;
依次做了下面的group by操作:
#1.(deal_type,trade_date,deal_sub_type);这个不用解释,上图很明显。
#2.(deal_type,trade_date);第2行、第4行、第7行、第9行、第11行、第13行。
#3.(deal_type)。第14到第17行。
第18行是总的一个汇总。
4. 使用cube()单列
select trade_date, sum(turnover) from test t where t.trade_date >= date '2013-08-10' group by cube(trade_date);
跟rollup()对比,你会发现rollup()是在最后一行汇总,cube()是在第1行。
如果想在最后一行汇总,可以使用order by trade_date nulls last排序。
如下:
select trade_date, sum(turnover) from test t where t.trade_date >= date '2013-08-10' group by cube(trade_date) order by trade_date nulls last;
5. 使用cube()多列
select trade_date, deal_type, sum(turnover) from test t where t.trade_date >= date '2013-08-10' group by cube(trade_date, deal_type) order by 1 nulls last;
“order by 1 nulls last”中的1当然指的就是你查询的第1列,即trade_date了。
通过上图我们可以发现这样几点:
#1.对整体group by了。
#2.对trade_date进行group by了。
#3.对deal_type进行group by了。
#4.对整体进行汇总。
6. 使用grouping和grouping_id来标记group by的结果
select grouping(trade_date), trade_date, grouping(deal_type), deal_type, sum(turnover) from test t where t.trade_date >= date '2013-08-10' group by cube(trade_date, deal_type) order by 1 nulls last;
通过上图你可以发现,如果列的值为空,则显示的值为1;否则显示的0.
显示为1的就是合计的列,由此我们可以使用grouping_id来标识group by后的结果。
select decode(grouping_id(trade_date), 1, '合计', trade_date), decode(grouping_id(deal_type), 1, '合计', deal_type), sum(turnover) from test t where t.trade_date >= date '2013-08-10' group by cube(trade_date, deal_type) order by 1 nulls last;
原来合计的列显示的空白,现在都显示的“合计”。
7. 使用grouping sets
select trade_date, deal_type, sum(turnover) from test t where t.trade_date >= date '2013-08-10' group by grouping sets(trade_date, deal_type) order by 1 nulls last;
你可以看到,上面的效果不正等同于使用union all吗?
select trade_date, null, sum(turnover) from test t where t.trade_date >= date '2013-08-10' group by trade_date union all select null, deal_type, sum(turnover) from test t where t.trade_date >= date '2013-08-10' group by deal_type;
相关推荐
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
轻量级密码算法LBlock的FPGA优化实现.docx
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
Git 资料 progit-zh-v2.1.1.pdf
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
篮球计分器FPGA附程序..doc
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
内容概要:本文档全面介绍了Linux开发的基础知识、应用场景、环境搭建、常用命令、Shell脚本编程以及C/C++和Python开发等内容。首先阐述了Linux开发的重要性及其在服务器端开发、嵌入式开发和系统运维等领域的广泛应用。接着详细讲解了如何选择合适的Linux发行版并安装系统,配置开发环境,包括安装必要的开发工具和配置SSH服务。文档还深入讲解了Linux基础命令,如文件和目录操作、文件内容查看与编辑、进程管理和权限管理。此外,介绍了Shell脚本编程的基本语法,包括变量、条件语句、循环语句和函数定义。针对C/C++和Python开发,文档分别讲解了编译器安装、程序编写与编译、调试方法及使用虚拟环境等内容。最后,简要介绍了Linux内核开发的相关知识,包括下载编译内核、内核模块开发等,并推荐了相关学习资源。 适合人群:对Linux开发感兴趣的初学者及有一定经验的研发人员,尤其是希望深入掌握Linux开发技能的开发者。 使用场景及目标:①掌握Linux开发环境的搭建与配置;②熟悉Linux基础命令和Shell脚本编程;③学习C/C++和Python在Linux下的开发流程;④了解Linux内核开发的基本概念和技术。 阅读建议:此文档内容丰富,涵盖面广,建议读者根据自身需求选择性阅读,并结合实际操作进行练习。特别是对于初学者,应先掌握基础命令和开发环境的搭建,再逐步深入到编程语言和内核开发的学习。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp数据,wgs84坐标系,直接使用。
内容概要:本文档《word练习题.docx》是一份详细的Word操作练习指南,涵盖了从基础到高级的各种功能。文档分为三个主要部分:内容编辑、页面布局和高效文档。内容编辑部分包括文本格式化、段落设置、项目编号、制表位、边框与底纹等练习;页面布局部分涉及分节符、分栏、页眉页脚、水印等设置;高效文档部分则聚焦于样式管理、导航窗格、题注、书签、超级链接、脚注与尾注、交叉引用等功能。每个练习都有具体的操作步骤,帮助用户掌握Word的各种实用技巧。 适合人群:适用于Word初学者及希望提高Word技能的中级用户,尤其是需要频繁使用Word进行文档编辑和排版的办公人员。 使用场景及目标:①帮助用户熟悉Word的基本操作,如文本编辑、格式设置等;②提升用户的文档排版能力,学会设置复杂的页面布局;③提高工作效率,掌握高效文档管理技巧,如样式应用、题注和交叉引用等。 其他说明:此文档不仅提供了具体的练习题目,还附带了详细的步骤说明,用户可以根据指引逐步完成每个练习。此外,文档中的一些练习涉及到智能文档和Office智能客户端的应用,有助于用户了解Word在企业级应用中的潜力。建议用户按照章节顺序逐步学习,实践每一个练习,以达到最佳的学习效果。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
全球腐败感知数据(2000-2023)——3000行 33个指标 关于数据集 该数据集包含3000行和33列,涵盖了2000年至2023年的腐败感知指数(CPI)数据和各种治理指标。它包括国家排名、分数和其他指标,如公共部门腐败、司法腐败、贿赂指数、商业道德、民主指数、法治、政府效率、经济指标和人类发展指数。 这些数据可用于: 腐败趋势分析 腐败对GDP、人类发展指数和治理的影响 跨国比较 数据可视化和机器学习模型 该数据集对研究人员、数据分析师、政策制定者和对研究全球腐败趋势非常有用。
毕业设计(论文) 基于FPGA的数字频率计设计.doc
街道级行政区划shp数据,wgs84坐标系,直接使用。
NTI1NDU3NTAyODMwOTQxMzI0M18xNzQ0Nzk1MTk1OTgz_6.JPG
街道级行政区划shp数据,wgs84坐标系,直接下载使用。