- 浏览: 265159 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (116)
- 开发工具 (21)
- Spring (5)
- Java (12)
- 面试题 (7)
- Hibernate (3)
- JavaScript (9)
- Jquery控件 (2)
- 自定义标签 (1)
- 错误总结 (3)
- Struts2+Juqery_qtip2 Form标签验证扩展 (1)
- Struts+Spring+MyBates (0)
- Oracle (37)
- Oracle错误总结 (5)
- J2EE (2)
- 研发管理 (1)
- MyBatis (1)
- Struts (1)
- Struts2 (1)
- PostgreSQL (1)
- weblogic (1)
- PL/SQL Developer (3)
- JSP (1)
- HTML (1)
- XHTML (1)
- JQuery (1)
最新评论
-
kyoldj:
select t.*, rownum rn
4. ...
oracle分页所遇到的rownum问题:要增加order by的唯一性 -
tanghuan:
不错不错
开发者如何提升和推销自己
一、如何理解group by 后 带 rollup 子句所产生的效果
group by 后 带 rollup 子句的功能可以理解为:先按一定的规则产生多种分组,然后按各种分组统计数据(至于统计出的数据是求和还是最大值还是平均值等这就取决于SELECT后的聚合函数)。因此要搞懂group by 后 带 rollup 子句的用法主要是搞懂它是如何按一定的规则产生多种分组的。另group by 后 带rollup 子句所返回的结果集,可以理解为各个分组所产生的结果集的并集且没有去掉重复数据。下面举例说明:
1、对比没有带rollup 的goup by
例:Group by A ,B
产生的分组种数:1种;
即group by A,B
返回结果集:也就是这一种分组的结果集。
2、带rollup 但 group by 与 rollup 之间没有任何内容
例1:Group by rollup(A ,B)
产生的分组种数:3 种;
第一种:group by A,B
第二种:group by A
第三种:group by NULL
(说明:本没有group byNULL的写法,在这里指是为了方便说明,而采用之。含义是:没有分组,也就是所有数据做一个统计。例如聚合函数是SUM的话,那就是对所有满足条件的数据进行求和。此写法的含义下同)
返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。
例2:Group by rollup(A ,B,C)
产生的分组种数:4 种;
第一种:group by A,B,C
第二种:group by A,B
第三种:group by A
第四种:group by NULL
返回结果集:为以上四种分组统计结果集的并集且未去掉重复数据。
3、带rollup 但 group by 与 rollup 之间还包含有列信息
例1:Group by A , rollup(A ,B)
产生的分组种数:3 种;
第一种:group by A,A,B 等价于 group by A,B
第二种:group by A,A 等价于 group by A
第三种:group by A,NULL 等价于 group by A
返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。
例2:Group by C , rollup(A ,B)
产生的分组种数:3 种;
第一种:group byC,A,B
第二种:group by C,A
第三种:group by C,NULL 等价于 group by C
返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。
4、带rollup 且rollup子句括号内又使用括号对列进行组合
例1:Group by rollup((A ,B))
产生的分组种数:2 种;
第一种:group by A,B
第二种:group by NULL
返回结果集:为以上两种分组统计结果集的并集且未去掉重复数据。
例2:Group by rollup(A ,(B,C))
产生的分组种数:3 种;
第一种:group by A,B,C
第二种:group by A
第三种:group by NULL
返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。
注:对这种情况,可以理解为几个列被括号括在一起时,就只能被看成一个整体,分组时不需要再细化。因此也可推断rollup括号内也顶多加到一重括号,加多重了应该没有任何意义(这个推断我没有做验证的哦)。
二、与rollup组合使用的其它几个辅助函数
1、grouping()函数
必须接受一列且只能接受一列做为其参数。参数列值为空返回1,参数列值非空返回0。
2、grouping_id()函数
必须接受一列或多列做为其参数。
返回值为按参数排列顺序,依次对各个参数使用grouping()函数,并将结果值依次串成一串二进制数然后再转化为十进制所得到的值。
例如:grouping(A) = 0 ; grouping(B) = 1;
则:grouping_id(A,B) =(01)2= 1;
grouping_id(B,A) = (10)2=2;
3、group_id()函数
调用时不需要且不能传入任何参数。
返回值为某个特定的分组出现的重复次数(第一大点中的第3种情况中往往会产生重复的分组)。重复次数从0开始,例如某个分组第一次出现则返回值为0,第二次出现时返回值为1,……,第n次出现返回值为n-1。
注:使用以上三个函数往往是为了过滤掉一部分统计数据,而达到美化统计结果的作用。
三、group by 后带rollup子句 与 group by 后带cube子句区别
group by 后带rollup子句 与 group by 后带cube子句的唯一区别就是:
带cube子句的group by 会产生更多的分组统计数据。cube后的列有多少种组合(注意组合是与顺序无关的)就会有多少种分组。
例:Group by
cube(A ,B,C)
产生的分组种数:8 种;
第一种:group by A,B,C
第二种:group by A,B
第三种:group by A,C
第四种:group by B,C
第五种:group by C
第六种:group by B
第七种:group by A
第八种:group by NULL
返回结果集:为以上八种分组统计结果集的并集且未去掉重复数据。
四、group by 后带grouping sets子句
group by 后带grouping sets子句 效果就是只返回小记记录,即只返回按单个列分组后的统计数据,不返回多个列组合分组的统计数据。
例1:Group by grouping sets(A )
产生的分组种数:1 种;
第一种:group by A
返回结果集:即为以上一种分组的统计结果集。
例2:Group by grouping sets(A ,B)
产生的分组种数:2 种;
第一种:group by A
第二种:group by B
返回结果集:为以上两种分组统计结果集的并集且未去掉重复数据。
例3:Group by grouping sets (A ,B,C)
产生的分组种数:3 种;
第一种:group by A
第二种:group by B
第三种:group by C
返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。
发表评论
-
oracle分页所遇到的rownum问题:要增加order by的唯一性
2013-12-04 17:04 1121昨天做完项目后让测试测试了一把,测试说分页查询貌似不起作用 ... -
Oracle中GOTO的用法
2013-12-03 14:37 1711Oracle中没有continue关键字,在loop中可以用 ... -
Oracle左连接与右连接区别
2013-10-28 19:12 1741数据表的连接有: 1、内连接(自然连接): 只有两个表相匹配 ... -
Oracle sql语句执行顺序
2013-07-05 09:53 28501sql语法的分析是从右到 ... -
修改oracle11g存档模式
2013-07-01 13:39 01.archive log list命令用户查看数据库存档 ... -
Oracle11g 导出数据库
2013-07-01 13:37 1213在运行中输入exp.exe, ... -
Oracle 冷备份和冷恢复
2013-07-01 13:37 1179阅读说明 1.参数说明 COLD_BACK_DIR: 冷备 ... -
Oracle创建用户,授权
2013-07-01 09:56 10731.用system,sys账户登录 2.创建用户creat ... -
MySql,Mssql,Oracle三种数据库性能优缺点及异同
2013-07-01 09:48 7312MySql优点 MySql是一个快速、多线程、多用 ... -
ORACLE纯SQL实现多行合并一行
2013-06-08 16:06 1744项目中遇到一个需求,需要将多行合并为一行。表结构如下:NAM ... -
Oracle触发器总结
2013-06-05 10:34 26141.触发器定义:触发器 ... -
row_number() over()分析函数用法
2013-05-10 16:12 4177row_number()over(partition ... -
Oracle数据库GLOBAL_NAMES参数的详细研究
2012-11-19 14:00 1080Oracle数据库GLOBAL_NAMES参数的相关知识 ... -
Oracle dblink远程调用序列时应注意的几点
2012-11-19 13:55 1869在一条语句中 ... -
Oracle dblink小结备忘
2012-11-16 10:48 16691.查看数据库的global_name ... -
Oracle dblink远程调用存储过程、函数、序列
2012-11-16 10:46 3934一、dblink远程调用procedure: 1、写了一个 ... -
Oracle job问题解决汇总
2012-11-13 10:42 1572一、job的运行频率设置 1.每天固定时间运行,比如 ... -
Oracle job操作注意事项
2012-11-13 10:40 1354创建一个简单的JOB实列 1、创建测试表 ... -
Oracle常用日期操作
2012-11-12 16:33 1159--Oracle trunc()函数的用法 /**** ... -
Oracle SQL性能优化
2012-11-06 16:12 1186(1) 选择最有效率的表名顺序(只在基于规则的 ...
相关推荐
SELECT语句高级用法1,使用group by 子句group by 子句将表分为几组,此子句通常与为每个这样的组生产总结值的聚集函数组合。使用不带聚集的group by 子句与在select 子句中使用的distinct(或unique)关键字很相 ...
--高级查询在数据库中用得是最频繁的,也是应用最广泛的。 Ø 基本常用查询 --select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 select distinct sex from ...
oracle如何实现分组排序和统计、聚集,如何分组求top N,什么是over分析函数,row_number(),rank(),dense_rank()区别又是什么, 如何找到一条记录的前后值,这份文档写得太好了。
7.1 基本的GROUP BY用法 171 7.2 HAVING子句 174 7.3 GROUP BY的“新”功能 175 7.4 GROUP BY的CUBE扩展 175 7.5 CUBE的实际应用 179 7.6 通过GROUPING()函数排除空值 185 7.7 用GROUPING()来扩展报告 186 ...
了解GROUP BY和HAVING子句的用法,用于对查询结果进行分组和过滤。 三、数据操作 学习如何使用INSERT INTO语句向数据库表中插入新数据。 掌握UPDATE语句的用法,以便修改数据库中的现有数据。 了解DELETE语句...
数据透视表用来做数据透视,可以通过一个或多个键分组聚合DataFrame中的数据,通过aggfunc参数决定聚合类型,是groupby的高级功能。 透视表就是将指定原有DataFrame的列分别作为行索引和列索引,然后对指定的列应用...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
本书主要覆盖Oracle开发必备的重要知识点:数据库编程规范、Oracle开发常用工具及使用、MERGE方法、神秘的NULL和讨厌的CHAR、扩展GROUP BY、Oracle自动类型转换、Oracle分析函数、Oracle层次查询、11g R2新特性之...
第一部分 Spark学习 6 第1章 Spark介绍 7 1.1 Spark简介与发展 7 1.2 Spark特点 7 1.3 Spark与Hadoop集成 7 ...28.3.2 JDBC GROUP BY查询语句实例 105 28.4 查询语句(JOIN) 106 28.4.1 JOIN查询语句实例 106
3.4 GROUP BY和HAVING子句 3.5 INSERT语句 3.6 UPDATE语句 3.7 DELETE语句 3.8 本章小结 第4章 PL/SQL 4.1 PL/SQL简介 4.2 PL/SQL基础 4.3 本章小结 第二篇 JDBC篇 第5章 JDBC技术基础 5.1 ...
可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。 支持面向对象...