热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

oraclerollup和cube语句分析

oraclerollup和cube语句分析rollup是对groupby的扩展,会进行小计和合计,而cube包含rollup,是粒度更精细的小计和合计。当只有一个字段时,rollup和cube是一样的。可用grouping对rollup和cube进行测试...SyntaxHigh

oracle rollup和cube语句分析
 
   rollup是对group by的扩展,会进行小计和合计,而cube包含rollup,是粒度更精细的小计和合计。当只有一个字段时,rollup和cube是一样的。
 
    可用grouping对rollup和cube进行测试:0看;1不看[看表示列有显示,不看表示没有显示]
 
             ① rollup  www.2cto.com  
                  ㈠ 什么都不看
                  ㈡ 从左往右  ┌ 先看第1个
                                        │ 再看前2个
                                        └ 后看前3个
             ② cube:0、1全排列
    rollup
 
    rollup后面指定的列以逗号分隔,rollup的计算结果和其后面指定的列的顺序有关,因为rollup的分组具有方向性。若指定n列,则有n+1种分组方式。可改变列的顺序,达到不同的业务需求。一定要牢记列的顺序对结果的影响!
 
    例子:
[sql] 
20:32:51 scott@ORCL (^ω^) select a.dname,b.job,sum(b.sal) sum_sal,grouping(a.dname),grouping(b.job)    www.2cto.com  
20:33:06   2    from dept a,emp b  
20:33:06   3   where a.deptno=b.deptno  
20:33:06   4   group by rollup(a.dname,b.job)  
20:33:08   5  /  
  
DNAME      JOB           SUM_SAL GROUPING(A.DNAME) GROUPING(B.JOB)  
---------- ---------- ---------- ----------------- ---------------  
SALES      CLERK             950                 0               0  
SALES      MANAGER          2850                 0               0  
SALES      SALESMAN         5600                 0               0  
SALES                       9400                 0               1  
RESEARCH   CLERK            1200                 0               0  
RESEARCH   ANALYST          7000                 0               0  
RESEARCH   MANAGER          2975                 0               0  
RESEARCH                   11175                 0               1  
ACCOUNTING CLERK            1300                 0               0  
ACCOUNTING MANAGER          2450                 0               0  
ACCOUNTING PRESIDENT        5000                 0               0  
ACCOUNTING                  8750                 0               1  
                           29325                 1               1  
已选择13行。    www.2cto.com  
 
    解释:什么都不看(1,1);从左往右,先看第一个(0,1)
    可以将不需要进行小计和合计的列移出rollup,要小计的留在rollup里面。
    比如:
[sql] 
20:48:37 scott@ORCL (^ω^) select a.dname,b.job,sum(b.sal) sum_sal,grouping(a.dname),grouping(b.job)  
20:57:43   2    from dept a,emp b  
20:57:43   3   where a.deptno=b.deptno  
20:57:43   4   group by a.dname,rollup(b.job)  
20:57:45   5  /  
    www.2cto.com  
DNAME                        JOB                   SUM_SAL GROUPING(A.DNAME) GROUPING(B.JOB)  
---------------------------- ------------------ ---------- ----------------- ---------------  
SALES                        CLERK                     950                 0               0  
SALES                        MANAGER                  2850                 0               0  
SALES                        SALESMAN                 5600                 0               0  
SALES                                                 9400                 0               1  
RESEARCH                     CLERK                    1200                 0               0  
RESEARCH                     ANALYST                  7000                 0               0  
RESEARCH                     MANAGER                  2975                 0               0  
RESEARCH                                             11175                 0               1  
ACCOUNTING                   CLERK                    1300                 0               0  
ACCOUNTING                   MANAGER                  2450                 0               0  
ACCOUNTING                   PRESIDENT                5000                 0               0  
ACCOUNTING                                            8750                 0               1  
  
已选择12行。  
   
    cube
    和rollup不同,cube的计算结果和顺序无关。若n列,则分组方式有2的n次方种。
 
[sql] 
20:57:46 scott@ORCL (^ω^) select a.dname,b.job,sum(b.sal) sum_sal,grouping(a.dname),grouping(b.job)  
21:27:03   2    from dept a,emp b  
21:27:03   3   where a.deptno=b.deptno  
21:27:03   4   group by cube(a.dname,b.job)  
21:27:04   5  /  
    www.2cto.com  
DNAME                        JOB                   SUM_SAL GROUPING(A.DNAME) GROUPING(B.JOB)  
---------------------------- ------------------ ---------- ----------------- ---------------  
                                                     29325                 1               1  
                             CLERK                    3450                 1               0  
                             ANALYST                  7000                 1               0  
                             MANAGER                  8275                 1               0  
                             SALESMAN                 5600                 1               0  
                             PRESIDENT                5000                 1               0  
SALES                                                 9400                 0               1  
SALES                        CLERK                     950                 0               0  
SALES                        MANAGER                  2850                 0               0  
SALES                        SALESMAN                 5600                 0               0  
RESEARCH                                             11175                 0               1  
RESEARCH                     CLERK                    1200                 0               0  
RESEARCH                     ANALYST                  7000                 0               0  
RESEARCH                     MANAGER                  2975                 0               0  
ACCOUNTING                                            8750                 0               1  
ACCOUNTING                   CLERK                    1300                 0               0  
ACCOUNTING                   MANAGER                  2450                 0               0  
ACCOUNTING                   PRESIDENT                5000                 0               0  
  
已选择18行。  
  www.2cto.com  
    注释:和rollup的结果相比,cube的所有可能的分组都走一遍。
 
    可以去掉合计和某些不需要的小计,通过部分cube实现。部分cube比部分rollup来得有用多了。
[sql] 
21:27:06 scott@ORCL (^ω^) select a.dname,b.job,sum(b.sal) sum_sal,grouping(a.dname),grouping(b.job)  
21:32:20   2    from dept a,emp b  
21:32:20   3   where a.deptno=b.deptno  
21:32:20   4   group by a.dname,cube(b.job)  
21:32:21   5  /  
  
DNAME                        JOB                   SUM_SAL GROUPING(A.DNAME) GROUPING(B.JOB)  
---------------------------- ------------------ ---------- ----------------- ---------------  
SALES                                                 9400                 0               1  
SALES                        CLERK                     950                 0               0  
SALES                        MANAGER                  2850                 0               0  
SALES                        SALESMAN                 5600                 0               0  
RESEARCH                                             11175                 0               1    www.2cto.com  
RESEARCH                     CLERK                    1200                 0               0  
RESEARCH                     ANALYST                  7000                 0               0  
RESEARCH                     MANAGER                  2975                 0               0  
ACCOUNTING                                            8750                 0               1  
ACCOUNTING                   CLERK                    1300                 0               0  
ACCOUNTING                   MANAGER                  2450                 0               0  
ACCOUNTING                   PRESIDENT                5000                 0               0  
  
已选择12行。 
 

推荐阅读
  • 在Android应用开发过程中,开发者经常遇到诸如CPU使用率过高、内存泄漏等问题。本文将介绍几种常用的命令及其应用场景,帮助开发者有效定位并解决问题。 ... [详细]
  • 在中标麒麟操作系统上部署达梦数据库及导入SQL文件
    本文档详细介绍了如何在中标麒麟操作系统上安装达梦数据库,并提供了导入SQL文件的具体步骤。首先,检查系统的发行版和内核版本,接着创建必要的用户和用户组,规划数据库安装路径,挂载安装介质,调整系统限制以确保数据库的正常运行,最后通过图形界面完成数据库的安装。 ... [详细]
  • 本文介绍了一种使用SQL Server存储过程来实现基于单一条件的高效分页查询的方法。通过示例代码,详细说明了如何构建和执行这种分页查询。 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • CRZ.im:一款极简的网址缩短服务及其安装指南
    本文介绍了一款名为CRZ.im的极简网址缩短服务,该服务采用PHP和SQLite开发,体积小巧,约10KB。本文还提供了详细的安装步骤,包括环境配置、域名解析及Nginx伪静态设置。 ... [详细]
  • 探讨了SQL Server 2000自带工具绘制的一对多关系表的效果及其导出功能,并推荐了几款专业的ER图绘制软件。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 解决JavaScript中法语字符排序问题
    在开发一个使用JavaScript、HTML和CSS的Web应用时,遇到从SQLite数据库中提取的法语词汇排序不正确的问题,特别是带重音符号的字母未按预期排序。 ... [详细]
  • 本文详细介绍了PostgreSQL与MySQL在SQL语法上的主要区别,包括如何使用COALESCE替代IFNULL、金额格式化的方法、别名处理以及日期处理等关键点。 ... [详细]
  • 本文详细介绍了在 Ubuntu 16.04 系统上安装和配置 PostgreSQL 数据库的方法,包括如何设置监听地址、启用密码加密、更改默认用户密码以及调整客户端访问控制。 ... [详细]
  • 本文作为《WM平台上使用Sybase Anywhere 11》系列的第二篇,将继续探讨在Windows Mobile (WM) 系统中如何高效地操作Sybase Anywhere 11数据库。继上一篇关于安装与基本测试的文章之后,本篇将深入讲解数据库的具体操作方法。 ... [详细]
  • 本文探讨了在SQL Server中处理几何类型列时遇到的INTERSECT操作限制,并提供了解决方案,包括通过转换数据类型和使用额外表结构的方法。 ... [详细]
author-avatar
我本僐悢
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有