oracle cude报错,Oracle的rollup、cube、grouping sets函数

2023-10-13 05:59

本文主要是介绍oracle cude报错,Oracle的rollup、cube、grouping sets函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Group by、rollup、cube、grouping sets区别

oracle除了group by基本用法之外,还有ROLLUP,CUBE,GROUPING SETS 等扩展方法,这些可以理解为Group By 分组函数封装后的精简用法,相当于多个union all 的组合显示效果,但是要比 多个 union all 的效率要高。

1.测试数据

CREATE TABLEemp (

IDNUMBER PRIMARY KEY,

NAME NVARCHAR2(30),

sexVARCHAR2(10),

birthday DATE,

work_locationVARCHAR2(30),

salNUMBER(10)

);

COMMENTON TABLE emp IS '员工信息表';

COMMENTON COLUMN emp.id IS '员工id';

COMMENTON COLUMN emp.name IS '员工姓名';

COMMENTON COLUMN emp.sex IS '性别';

COMMENTON COLUMN emp.birthday IS '出生日期';

COMMENTON COLUMN emp.work_location IS '工作地点';

COMMENTON COLUMN emp.sal IS '工资';INSERT INTOemp(ID, NAME, sex, birthday, work_location, sal)VALUES(1, '小王','男', to_date('1994-12-08','yyyy-mm-dd'), '杭州', 4500);INSERT INTOemp(ID, NAME, sex, birthday, work_location, sal)VALUES(2, '小瑞','男', to_date('1995-02-01','yyyy-mm-dd'), '杭州', 8000);INSERT INTOemp(ID, NAME, sex, birthday, work_location, sal)VALUES(3, '小倩子','女', to_date('1994-07-08','yyyy-mm-dd'), '上海', 6000);INSERT INTOemp(ID, NAME, sex, birthday, work_location, sal)VALUES(4, '小权','男', to_date('1993-01-01','yyyy-mm-dd'), '北京', 8000);INSERT INTOemp(ID, NAME, sex, birthday, work_location, sal)VALUES(5, '小优子','男', to_date('1994-12-08','yyyy-mm-dd'), '深圳', 9000);INSERT INTOemp(ID, NAME, sex, birthday, work_location, sal)VALUES(6, '小游子','女', to_date('1994-07-08','yyyy-mm-dd'), '深圳', 7500);

2.group by

GROUP BY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。

select子句中的列名必须为分组列或聚合函数,聚合函数对于group by子句定义的每个组返回一个结果。

只能 select 聚合函数(如:sum() 、max()、min()、avg()、count())

对组筛选只能 having,不能是 where(where执行在分组之前,所以where中不能出现聚合函数)

不能对 clob 类型项目进行 group by

WITH t_1 AS( #with子查询SELECTto_clob(t.name) a#to_clob函数,将普通字段转换为clob类型FROMemp t

)

#以下的SQL报错SELECT COUNT(1)FROMt_1GROUP BY a;#a为clob类型的字段,不能应用于group by进行分组

3.rollup

从右到左递减分组

先小计在合计

按照order by 1(,2,3,4...)排序

如果rollup参数为N各,则相当于N+1个group by 分组的union的结合

例如:group by rollup(A,B,C),则执行的结果为首先对A,B,C进行group by分组,之后A,B分组,之后A分组,最后对null,也就是整个表进行group by

SELECT A, B, C, SUM(D) FROM table_name GROUP BYROLLUP(A, B, C);

等同于SELECT * from(SELECT A, B, C, SUM(D) FROM table_name GROUP BY(A, B, C)UNION ALL

SELECT A, B, null, SUM(D) FROM table_name GROUP BY(A, B, null)UNION ALL

SELECT A, null, null, SUM(D) FROM table_name GROUP BY (A, null, null)UNION ALL

SELECT null, null, null, SUM(D) From table_name group by (null, null, null)

)order by 1, 2, 3

18b0c11df5ad5f7768613a4889549916.png

beaa52cb1e9a7d1f434a0079d543848d.png

22ee9b720880934da7e89753031e2fd2.png

4.CUBE

cube为立方体的意思,实现交叉组合,结果没有顺序(rollup是有顺序的)

如果cude参数为N个,会将group by执行2^N

当cube一个参数时等同于rollup

它比 rollup 扩展更加精细,组合类型更多,对于 cube 来说,列的名字只要一样,那么顺序无所谓,结果都是一样的,例如rollup(A,B,C)和rollup(B,C,A)结果是一样的。因为 cube 是各种可能情况的组合,只不过统计的结果顺序不同而已。但是对于 rollup 来说,列的顺序不同,执行顺序从右开始递减,则结果不同。

例如:group by cube(A,B,C) ORDER BY A,B,C之后,group by执行的顺序为:(A,B,C),(A,B),(A,C),(A),(B,C),(B),(C),(null全部)。就等同于这些个group by的组合的union all

如果不order by则先执行null全部,之后C,最后A,B,C组合

633d63c37c87a5489d2f9adb5e75e64d.png

9d574e7b46d28a2b1bba83f862add818.png

5.GROUPING SETS

group by A,B是对A和B同时进行分组

group by grouping set(A,B)是对A,B单独进行分组

94a2490457b93cd81d0e389f9be4797c.png

cb24045d913c09aac2733dd28b151abc.png

b4dbceafe6af92a82291f891a9917d24.png

6.GROUPING

用于区分 原有值 和 统计项,与group by搭配使用

參数仅仅有一个,并且必须为group by中出现的某一列

grouping(A) = 0 : 数据库中本来的值

grouping (A)= 1 : 统计的结果

50973993a3e0b6d01c13fb45084eae3d.png

这篇关于oracle cude报错,Oracle的rollup、cube、grouping sets函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_42294495/article/details/116336418
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/201236

相关文章

Oracle 通过 ROWID 批量更新表的方法

《Oracle通过ROWID批量更新表的方法》在Oracle数据库中,使用ROWID进行批量更新是一种高效的更新方法,因为它直接定位到物理行位置,避免了通过索引查找的开销,下面给大家介绍Orac... 目录oracle 通过 ROWID 批量更新表ROWID 基本概念性能优化建议性能UoTrFPH优化建议注

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

《idea报错java:非法字符:‘ufeff‘的解决步骤以及说明》:本文主要介绍idea报错java:非法字符:ufeff的解决步骤以及说明,文章详细解释了为什么在Java中会出现uf... 目录BOM是什么?1. BOM的作用2. 为什么会出现 \ufeff 错误?3. 如何解决 \ufeff 问题?最

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重

解决Maven项目报错:failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题

《解决Maven项目报错:failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:3.13.0的问题》这篇文章主要介... 目录Maven项目报错:failed to execute goal org.apache.maven.pl

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二: