ORACLE命令 ROLLUP

MySQL(六)——多表查询 文章介绍了多表查询,包含连接查询、子查询以及联合查询 阅读详情
重温SQL基本命令时,发现GROUP BY ROLLUP() 这个命令有所生疏,于是自己琢磨了下,写下来。
先通览下整个表:EMP
SQL> SELECT * FROM EMP ;


--查询结果:

[sql]  view plain copy
  1. EMPNO ENAME      JOB         MGR HIREDATE          SAL DEPTNO  
  2. ----- ---------- --------- ----- ----------- --------- ------  
  3.  7369 SMITH      CLERK      7902 1980/12/17     800.00     20  
  4.  7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00     30  
  5.  7521 WARD       SALESMAN   7698 1981/2/22     1250.00     30  
  6.  7566 JONES      MANAGER    7839 1981/4/2      2975.00     20  
  7.  7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00     30  
  8.  7698 BLAKE      MANAGER    7839 1981/5/1      2850.00     30  
  9.  7782 CLARK      MANAGER    7839 1981/6/9      2450.00     10  
  10.  7788 SCOTT      ANALYST    7566 1987/4/19     3000.00     20  
  11.  7839 KING       PRESIDENT       1981/11/17    5000.00     10  
  12.  7844 TURNER     SALESMAN   7698 1981/9/8      1500.00     30  
  13.  7876 ADAMS      CLERK      7788 1987/5/23     1100.00     20  
  14.  7900 JAMES      CLERK      7698 1981/12/3      950.00     30  
  15.  7902 FORD       ANALYST    7566 1981/12/3     3000.00     20  
  16.  7934 MILLER     CLERK      7782 1982/1/23     1300.00     10  



          在对字段 JOB, SAL, DEPTNO 进行分组小计前,先进性分组排序,以便和小计做对比。  做这一步前,先讲下GROUP BY ROOLUP命令的基本用法:在完成了数据基本分组之后,根据分组字段列表(注释:也就是GROUP BY后面的字段,比如GROUP BY JOB , DEPTNO,那么分组字段就是JOB,DEPTNO。 以此类推,但进性分组小计时:GROUP BY ROLLUP(JOB, DEPTNO ); 那么分组字段依旧是JOB, DEPTNO ),
       按照从右向左的顺序,每次去掉最后一个字段 <也就是每次去掉字段列表最右边的字段>(注释:每次去掉字段列表的最后一个字段是什么意思呢?比如:GROUP BY ROLLUP(EMPNO, ENAME,JOB, SAL,DEPTNO ); 
那么这次分组小计将根据字段列表的字段个数分5步进行:
1.GROUP BY EMPNO, ENAME,JOB, SAL,DEPTNO;第一次分组。
2.GROUP BY EMPNO, ENAME,JOB, SAL;第二次分组。(去掉最后一个字段DEPTNO,  后的汇总)
3.GROUP BY EMPNO, ENAME,JOB;第三次分组。(去掉最后一个字段SAL, 后的汇总)
4.GROUP BY EMPNO, ENAME;第四次分组。(去掉最后一个字段JOB, 后的汇总)
5.4.GROUP BY EMPNO;第五次分组。(去掉最后一个字段ENAME ,后的汇总)


下面先来看根据JOB(职业)分组,来计算每一类职业的平均薪水:
[sql]  view plain copy
  1. SQL>  SELECT JOB,  AVG(SAL) FROM EMP GROUP BY JOB ORDER BY JOB;  
  2.    
  3. JOB         AVG(SAL)  
  4. --------- ----------  
  5. ANALYST         3000  
  6. CLERK         1037.5  
  7. MANAGER   2758.33333  
  8. PRESIDENT       5000  
  9. SALESMAN        1400  


我们根据一栏:MANAGER(经理)的平均薪水为2758.3333来对比下面:
[sql]  view plain copy
  1. SQL> SELECT JOB, DEPTNO, AVG(SAL) FROM EMP GROUP BY ROLLUP(JOB,DEPTNO) ORDER BY JOB;  
  2.    
  3. JOB       DEPTNO   AVG(SAL)  
  4. --------- ------ ----------  
  5. ANALYST       20       3000  
  6. ANALYST                3000  
  7. CLERK         10       1300  
  8. CLERK         20        950  
  9. CLERK         30        950  
  10. CLERK                1037.5  
  11. MANAGER       10       2450  
  12. MANAGER       20       2975  
  13. MANAGER       30       2850  
  14. MANAGER          2758.33333  
  15. PRESIDENT     10       5000  
  16. PRESIDENT              5000  
  17. SALESMAN      30       1400  
  18. SALESMAN               1400  


                
分析如下,但开始根据GROUP BY ROLLUP(JOB,DEPTNO);进性分组小计时,JOB出现重复的,但DEPTNO却分散在不同的部门;所以结果@_1如下:
[sql]  view plain copy
  1. <pre name="code" class="sql">MANAGER       10       2450  
  2. MANAGER       20       2975  
  3. MANAGER       30       2850  
  4. MANAGER          2758.33333  


 


但去掉字段列表最后一个字段时<即字段列表最右边的那个字段,本次为:DEPTNO>,其实执行的就变成GROUP BY ROLLUP(JOB);--所以结果@_2如下:
MANAGER          2758.33333   --但去掉了DEPTNO字段后,这一列当然就为NULL,不同的查询下,有时显示的是空。


然后根据ORDER BY JOB,排序后,所以结@_1,@_2就如下:
[sql]  view plain copy
  1. MANAGER       10       2450  
  2. MANAGER       20       2975  
  3. MANAGER       30       2850  
  4. MANAGER          2758.33333  

【Mysql学习之旅-2】经典sql面试题及答案分析 其它面试题(springboot、mybatis、并发、java中高级面试总结等)teacher;teachert_idt_namet_idteacherVALUES (‘01’, ‘张三丰’);teacherVALUES (‘02’, ‘灭绝师太’);teacherVALUES (‘03’, ‘空见’);score;scores_idc_idscores_idc_id其它面试题(springboot、mybatis、并发、java中高级面试总结等) 阅读详情

相关推荐

MySQL多表联查

在关系型数据库中,我们通常为了减少数据的冗余量将对数据表进行规范,将数据分割到不同的表中。当我们需要将这些数据重新合成一条时,就需要用到表连接 可以理解为将两个表的每一行,以“两两横向对接”的方式,所得到的所有行的结果。 首先笛卡儿积 将A表的每一条记录与B表的每一条记录强行拼在一起。所以,如果A表有n条记录,B表有m条记录,笛卡尔积产生的结果就会产生n*m条记录。笛卡儿积会出现大量的冗余,...

weixin_43706478的博客 540

Oracle的Rollup用法

Oracle的Rollup用法 Oracle的Rollup用法

java数据库多表查询

但在左连接中,因为emp表是左表,所以左表中的记录都会查询出来,即“张三”这条记录也会查出,但相应的右表部分显示NULL。两张表的连接查询一定有一个主外键关系,三张表的连接查询就一定有两个主外键关系,所以在大家不是很熟悉连接查询时,首先要学会去除无用笛卡尔积,那么就是用主外键关系作为条件来处理。这个条件大多数情况下都是使用主外键关系去除。连接查询会产生笛卡尔积,假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。

SSSS__AS的博客 2199

Oracle rollup函数

Oracle rollup函数

tttzzzqqq2018的博客 2396

mysql总结

mysql总结 一、增 insert into table(columnname,…) values(‘value’,…) 二、删 delete from table where columnname = ‘value’ 三、改 update table set columnname = ‘value’,… where 条件 四、查 1.单表查询 select * from table 2.多表联查 select a.id,b.name from table1 a , table2 b where

huang9608的博客 181

MySQL数据库应用学习笔记--3.多表链接、子查询、视图、事务控制

MySQL数据库应用集合操作符多表连接子查询视图事务控制 集合操作符 UNION ALL :合并多个查询结果,可能会包含重复记录 UNION :合并多个查询的结果,不包含重复记录 集合操作符可以将两个及两个以上查询的结果组合成一个结果集返回。要使用集合操作符,多个查询返回的记录必须具有相同的列数,列的数据类型也必须匹配,但列名可以不同。 多表连接 两个表的内连接 等值连接时,如果关联列的列名相同,则可使用USING关键字 多表内连接 左外连接、右外连接、全连接 交叉连接(笛卡尔积)

大梦想家的博客 363

oracle分析函数——rollup和cube

原文见我得博客:http://lanjingling.github.io/2015/10/09/oracle-fenxihanshu-1/ 1、rollup介绍: group by后带rollup子句的功能可以理解为:先按一定的规则产生多种分组,然后按各种分组统计数据。(至于统计出的数据是求和还是最大值还是平均值等这就取决于SELECT后的聚合函数)。 oracle中rollup和mys

赶路人儿 5392

SQL语句常见面试题

update Sc set score=(select avg(Sc_2.score) from Sc Sc_2 where SC_2.c_no=Sc.c_no ) from Course,Teacher where Course.c_no=Sc.c_no and Course.t_no=Teacher.t_no and Teacher.tname='叶平');4、查询至少出版过20套图书的出版社,在查询结果中按出版社编号的升序顺序显示满足条件的出版社编号、出版社名称和每个出版社出版的图书套数。

wange6906的博客 786

Oracle中rollup函数详解

Oracle中rollup函数主要用于分组汇总,如果rollup中有n个字段,则会分别按【字段1】、【字段1,字段2】,【字段1,字段2,字段3】,...,【字段1,字段2,字段3,...字段n】进行分组统计,同时还会去掉所有分组字段进行一次统计,因此会有n+1次分组,也就是说,统计的分组维度是从左到右依次增加一列,从0列一直到n列。

实泽有之,无泽虚之 1万+

MySQL视图核心特性与性能优化实战

数据库视图(View)是SQL查询的逻辑封装,本质上是存储在数据库中的预编译查询语句。作为关系型数据库的重要特性,视图通过虚拟表形式实现查询复用,其核心原理是将复杂JOIN操作、计算逻辑和权限控制封装为可重复使用的数据访问层。在MySQL数据库开发中,视图技术能显著提升开发效率,主要体现为三大技术价值:简化多表查询复杂度、实现字段级数据权限控制、构建稳定的逻辑抽象层。实际工程中常用于报表系统、金融数据脱敏、微服务数据共享等场景,配合MERGE/TEMPTABLE算法选择和EXPLAIN性能分析工具,可有效解

weixin_30784501的博客 430

游戏公司BI工程师校招笔试:SQL、业务口径与Power BI/帆软考点复盘

从数据思维到工程实践,BI工程师的核心竞争力不在于熟悉某个可视化工具,而在于用SQL准确取数、用业务口径定义指标、用结构化框架分析问题。游戏行业校招笔试正是围绕这些底层能力展开:手写SQL考察多表关联与窗口函数,指标题检验对DAU、留存、ARPU等口径的敏感性,工具题则涉及Power BI连接MySQL时Import与DirectQuery的区别以及帆软系产品的选型逻辑。实际业务中,BI工程师需要将埋点日志转化为决策依据,因此掌握数据校验、维度拆解和同环比对比等排查方法至关重要。本文以搜狐畅游校招笔试题为样

weixin_34198881的博客 478

oracle中的roll up,oracle  group by 与roll up,cube,grouping sets,grouping_id联合使用

Oracle的group by除了基本用法以外,还有3种扩展用法,分别是rollup、cube、groupingsets。1 rollup假设有一个表test,有A、B、C、D、E5列。如果使用group by rollup(A,B,C),首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUPBY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。rollu...

weixin_34479122的博客 691

SQL数据分组与排序全解:GROUP BY、ORDER BY与窗口函数实战

在数据库查询中,分组(GROUP BY)与排序(ORDER BY)是两项最基础也最易出错的SQL操作。分组通过聚合函数将多行数据压缩为一行汇总,排序则决定了结果集的呈现顺序与Top N排名。理解WHERE→GROUP BY→HAVING→ORDER BY的真实执行顺序,能避免聚合函数误用与结果混乱。针对“每个组内取前几条”的需求,窗口函数如ROW_NUMBER、RANK配合PARTITION BY与ORDER BY提供了高效标准解法。此外,分组排序还涉及索引设计、NULL值处理、中文排序等工程细节,直接影响

weixin_31292729的博客 239

oracle分析函数系列之ROLLUP和CUBE

使用rollup函数的介绍     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、

rfb0204421的专栏 1668

Sqoop数据迁移:核心架构、优化配置与实战技巧

数据迁移工具是构建数据仓库和数据分析平台的关键组件,其核心原理是通过高效的数据传输机制实现异构数据源之间的数据同步。Sqoop作为Hadoop生态系统中专为关系型数据库与HDFS之间数据传输设计的工具,采用MapReduce并行处理框架实现高性能数据迁移。在实际工程应用中,合理配置分片策略、类型映射规则以及性能参数,可以显著提升大数据环境下的数据导入导出效率。特别是在处理MySQL、Oracle等主流数据库与HDFS、Hive、HBase等大数据存储系统之间的ETL过程时,Sqoop的connector插件

优快云头条 697

SpringBoot+Vue库存管理系统开发实战:从数据库到部署全复盘

前后端分离架构是现代企业级应用开发的主流模式,它将后端服务与前端界面解耦,通过RESTful API进行数据交互,大幅提升开发效率与可维护性。数据库设计和事务一致性是这类系统的核心基础,尤其在库存管理等高频读写场景下,需要合理设计表结构、索引以及并发控制策略,确保数据准确可靠。从技术选型到部署上线,SpringBoot提供稳定的后端支撑,Vue负责高效的前端交互,结合MySQL、MyBatis等成熟工具,能够构建出一套完整的库存管理系统。本文基于实际项目,详细复盘了从数据库建模、后端接口开发、前端页面联调到

weixin_34332905的博客 293

SQL注入实战:搜索型注入漏洞的探测、利用与防御

SQL注入是一种通过将恶意SQL代码插入到Web应用输入参数中,从而操纵后端数据库查询的常见攻击技术。其核心原理在于应用程序未对用户输入进行充分验证和过滤,导致攻击者能够破坏原始SQL查询的逻辑结构,执行非授权的数据库操作。这项技术的危害性极大,可直接导致数据泄露、数据篡改甚至服务器沦陷,是Web安全领域的头号威胁之一。在众多应用场景中,具备模糊查询功能的搜索框是SQL注入的高发区,常因开发人员对用户输入处理不当而形成“搜索型注入”漏洞。本文将以Pikachu靶场为实验环境,深入剖析搜索型注入中“字符型闭合

weixin_30908941的博客 363

Magento + DigitalOcean 电商架构实战:高性能、低成本、高可用落地指南

Magento 是面向中大型电商的企业级 PHP 开源商城框架,其 EAV 模型、多维度商品管理与复杂索引机制对底层 I/O 性能和系统确定性提出严苛要求;DigitalOcean 凭借低延迟 Block Storage、Floating IP 秒级切换、S3 兼容 Spaces 及极简网络模型,成为匹配 Magento 生产需求的高性价比云基础设施。该组合在真实黑五压测(1800 TPS)、百万级 SKU 索引重建、高精度 Cron 调度等场景中展现出优于 AWS EC2 和自建服务器的稳定性与可维护性,

weixin_33797791的博客 436
上一篇: 十字链表【待续】
下一篇: ORACLE命令 CUBE
错_对
博客等级 码龄16年 68粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值