- 浏览: 92277 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (139)
- oracle基础 (27)
- oracle sql编程及优化 (14)
- ELK (4)
- java (11)
- java设计模式 (0)
- 互联网知识 (6)
- 安装MongoDB (1)
- MongoDB (0)
- spark (1)
- scala (1)
- spring boot (3)
- spring cloud (8)
- redis (6)
- virtualbox (3)
- docker (7)
- rabbitmq (0)
- rocketmq (2)
- k8s (8)
- ubuntu (11)
- centos (3)
- mysql (4)
- nginx (7)
- tomcat (5)
- postman (1)
- other (10)
最新评论
-
lihao312:
insert all功能好强大哦 之前都没有用到过
oracle 多表插入 insert all 用法(即列转行)
建表如下:
create table TEST_GROUP(NAME VARCHAR2(20),CLASS VARCHAR2(10),KEMU VARCHAR2(4),CHENGJI VARCHAR2(3)); insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI) values ('张三', '1班', '数学', '90'); insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI) values ('张三', '1班', '语文', '68'); insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI) values ('李四', '1班', '数学', '90'); insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI) values ('李四', '1班', '语文', '88'); insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI) values ('王五', '2班', '数学', '70'); insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI) values ('王五', '2班', '语文', '88'); insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI) values ('小六', '2班', '数学', '95'); insert into TEST_GROUP (NAME, CLASS, KEMU, CHENGJI) values ('小六', '2班', '语文', '98');
ROLLUP用法:
GROUP BY ROLLUP(A, B, C), 首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。
select class, name, sum(chengji) from test_group group by rollup(class, name) order by class;
CUBE用法:
GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C), 最后对全表进行GROUP BY操作。
select class, name, sum(chengji) from test_group group by cube(class, name) order by class;
grouping sets用法:
grouping sets就是对参数中的每个参数做grouping,也就是有几个参数做几次grouping, 例如使用group by grouping sets(A,B,C),则对(A),(B),(C)进行group by,如果使用group by grouping sets((A,B),C),则对(A,B),(C)进行group by。甚至grouping by grouping set(A,A)都是语法允许的,也就是对(A)进行2次group by, grouping sets的参数允许重复
select class, name, sum(chengji) from test_group group by grouping sets(class,name);
grouping()函数排除空值用法:
grouping():参数只有一个,而且必须为group by中出现的某一列,表示结果集的一行是否对该列做了grouping。对于对该列做了grouping的行而言,grouping()=0,反之为1;
select case when grouping(name) = '1' and grouping(class) = '0' then class || ' 合计' when grouping(name) = '0' and grouping(class) = '0' then name when grouping(name) = '1' and grouping(class) = '1' then '总计' end, sum(chengji) from test_group group by rollup(class, name) order by class;
having grouping()用法:
select decode(grouping(name), '1', ' 总计:', name), sum(chengji) from test_group group by cube(class, name) having grouping(class) = 1;
grouping_id()函数用法:
grouping_id():参数可以是多个,但必须为group by中出现的列。Grouping_id()的返回值其实就是参数中的每列的grouping()值的二进制向量,例如如果grouping(A)=1,grouping(B)=0,则grouping_id(A,B)的返回值就是二进制的10,转成10进制就是2。
select grouping_id(class, name), grouping(class), grouping(name), name, class, sum(chengji) from test_group group by cube(class, name);
结果集看是有点乱,我们加上having条件看看:
select grouping_id(class, name), grouping(class), grouping(name), name, class, sum(chengji) from test_group group by cube(class, name) having grouping_id(class, name) in(0,1,3);
group_id()函数用法:
group_id():无参数。见上面的说明3),group by对某些列的集合会进行重复的grouping,而实际上绝大多数情况下对结果集中的这些重复行是不需要的,那就必须有办法剔出这些重复grouping的行。当结果集中有n条重复grouping而形成的行时,每行的group_id()分别是0,1,…,n,这样我们在条件中加入一个group_id()<1就可以剔出这些重复grouping的行了。
GROUP BY 的局限性
如果不知道GROUP BY不能做什么,你对于它的学习就是不完整的。GROUP BY的局限性如下:
1. LOB列,不能用做GROUP BY 表达式的一部分
2. 子查询是不允许的
3. 如果GROUP BY子句引用任何对象类型的列,则查询不能并行化
发表评论
文章已被作者锁定,不允许评论。
-
oracle rman
2014-06-30 15:14 4491. 检查数据库模式: sqlplus /nolog ... -
Oracle Scheduler Chain 的用法
2014-06-15 22:10 0Oracle CHAIN,也就是链,是将一串需要完成的作业连 ... -
oracle 热备脚本
2014-06-08 22:59 0oracle 热备脚本 -
表空间传输
2014-05-25 23:27 2042http://www.linuxidc.com/Linux ... -
sqlplus 基本命令
2014-05-21 18:01 577SQL> show all --查看所有68个系统变 ... -
undo 文件丢失的数据库恢复
2014-05-19 14:55 11621.连接数据库 sqlplus /nolog con ... -
oracle日志文件损坏时,用隐含参数启动:_allow_resetlogs_corruption
2014-05-17 10:06 1474Oracle隐含参数:_allow_resetlogs_c ... -
Oracle TYPE OBJECT 用法
2012-11-05 15:46 0Oracle TYPE OBJECT 用法 -
如何降低Oracle表的高水位
2012-11-05 15:39 0如何降低Oracle表的高水位 -
Oracle外部表
2012-11-06 17:10 588转载:Oracle外部表4 Oracle外 ... -
ORACLE删除重复记录方法
2012-11-05 15:32 0转载:ORACLE删除重复记录方法 -
oracle table()函数用法
2012-11-05 15:31 0转载:oracle table()函数用法 -
关于Oracle建物化视图的总结
2012-11-05 15:31 0转载:关于Oracle建物化视图的总结 -
全面学习ORACLE Scheduler特性
2012-11-05 15:58 592转载:全面学习ORACLE Scheduler特性 -
WITH子句与未公开HINT MATERIALIZE联合使用, 取代临时表
2012-11-05 15:11 0转载:WITH子句与未公开HINT MATERIALIZE联 ... -
如何找回Oracle数据库初始化密码
2012-11-05 15:03 0转载:如何找回Oracle数据库初始化密码 -
ORACLE EXP和IMP浅谈
2012-11-05 15:03 0转载:ORACLE EXP和IMP浅谈 oracl ... -
Oracle SQL Loader
2012-11-05 14:55 0引用:Oracle SQL Loader -
oracle flashback介绍
2012-11-05 16:01 697引用:Flashback Table之RECYCLEBIN ... -
oracle v$视图
2012-10-26 14:16 0v$locked_object 查看锁定的会话 ...
相关推荐
### SQL语句中Group BY 和Rollup以及Cube用法 #### Group BY 子句 `GROUP BY`子句是SQL查询中的一个非常重要的部分,它用于将数据表中的行按照一个或多个列进行分组,使得可以对每个分组执行聚合函数(如SUM、...
GROUP BY 子句有多种形式,本文将通过实例来说明 GROUP BY 子句的三种样式:GROUP BY、GROUP BY ROLLUP、GROUP BY CUBE、GROUP BY GROUPING SETS。 1. GROUP BY 语句 GROUP BY 语句是最基本的分组语句,它可以根据...
而在`GROUP BY`的基础上,`CUBE`和`ROLLUP`两个关键词则提供了一种更加灵活的数据分组方式,可以生成不同层次级别的汇总结果。 #### 一、Cube的理解 `CUBE`是SQL中的一个扩展关键字,它可以生成所有可能的分组组合...
SQL Server中的用法为group by colomn with [rollup|cube],首先要弄明白rollup 和cube,就要知道group by的用法,group by 为对列进行分组,只展现分组统计的值,而 rollup 为分层次展现,cube 为展现列中所有层次...
- 对于 `GROUP BY CUBE(A, B)`,产生的分组包括:`GROUP BY A, B`、`GROUP BY A`、`GROUP BY B` 和 `GROUP BY NULL`。 相比之下,`ROLLUP` 会按照层次递减的方式生成分组,只包括:`GROUP BY A, B`、`GROUP BY A` ...
「GROUP BY 与 ROLLUP 子句的使用」 `GROUP BY` 语句是 SQL 中一种常用的语句,用来对查询结果进行分组并进行聚合操作。但是,如果我们想要对分组结果进行汇总统计时,使用 `ROLLUP` 子句可以实现这一功能。 ...
`CUBE`和`ROLLUP`是`WITH`子句中的两个特殊运算符,它们主要用于多维度数据分析和聚合操作,通常在`GROUP BY`语句中配合使用。 1. **CUBE运算符**: `CUBE`生成的结果集包含了所有可能的子集,即所选列中值的所有...
而在GROUP BY的基础上,Oracle数据库提供了两种高级分组功能:ROLLUP和CUBE,它们允许我们更灵活地生成汇总数据。 1. ROLLUP(滚联回溯): ROLLUP是GROUP BY的一个扩展,它不仅返回每个单独的分组结果,还会生成...
Oracle数据库中的ROLLUP和CUBE是两种用于生成数据汇总的SQL操作,它们在数据分析和报告制作中非常有用。本文将详细介绍这两个概念以及如何在实际应用中使用它们。 首先,我们来理解`ROLLUP`。ROLLUP操作是GROUP BY...
本篇将重点探讨Hive中的窗口函数以及如何利用它们进行cube和rollup操作。这些功能极大地增强了数据分析的能力,使得我们可以对数据进行更复杂的聚合。 窗口函数在SQL中是一种非常强大的工具,它允许我们在一个数据...
在"ORACLE学习笔记系列(15)使用扩展的 GROUP BY 子句"这篇博文中,作者深入探讨了GROUP BY子句的高级用法,特别是如何利用扩展功能来处理更复杂的查询需求。 在标准的GROUP BY语句中,我们通常会指定一列或多列,...
在SQLSERVER中,有四种特殊的运算符用于处理和汇总数据:UNION、CUBE、ROLLUP和COMPUTE。这些运算符在数据查询和分析时非常有用,尤其在处理多个数据源合并、多维数据分析和自定义汇总计算时。 首先,我们来详细...
它返回一个整数值,表示其参数在GROUP BY或ROLLUP/CUBE中的分组级别。值为0表示详细数据,非零值表示不同级别的汇总。例如: ```sql SELECT DIVISION, JOB_ID, SUM(SALARY), GROUPING(DIVISION), GROUPING(JOB_ID...
在这个例子中,`GROUP BY ROLLUP (index_type, status)`表示先按`index_type`分组,再按`status`分组,最后返回所有可能的子集汇总。查询结果会包括各个`index_type`的状态数量、各`index_type`的总计、所有`index_...
`ROLLUP`是一个用于GROUP BY子句的扩展选项,它能够帮助我们生成包含不同层级汇总信息的结果集。通过使用`ROLLUP`,可以在结果集中自动生成各种级别上的汇总数据,而无需额外编写复杂的SQL语句。 #### 二、基本用法...
在数据库查询语言 SQL 中,`ROLLUP`, `CUBE`, 和 `GROUPING SETS` 是三个重要的概念,它们主要用于处理多维度数据的汇总和分组问题,使得数据分析更加灵活高效。接下来,我们将详细介绍这三个概念的原理、语法以及...
sql学习 cube之比rollup粒度更细的展现.sql
优化 Group By 查询速度的实践经验 在实际项目中,遇到了表数据量大导致查询速度很慢的问题。通过记录和优化过程,总结出一些有价值的经验,希望能够帮助读者解决类似的问题。 知识点1:Group By 查询的索引设置 ...