热门标签 | 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行。 
 

推荐阅读
  • 如何在PHP中有效实现和管理互斥锁机制(PHP锁) ... [详细]
  • 利用Java开发功能完备的电话簿应用程序,支持添加、查询与删除操作
    本研究基于Java语言开发了一款功能全面的电话簿应用程序,实现了与数据库的高效连接。该应用不仅支持添加、查询和删除联系人信息,还具备输出最大和最小ID号的功能,并能够对用户输入的ID号进行有效性验证,确保数据的准确性和完整性。详细实现方法可参阅相关文档。 ... [详细]
  • 基于Java和JSP的电子医疗记录管理平台
    随着信息技术的快速发展,各类管理系统已在各行各业得到广泛应用。传统的人工管理模式已逐渐无法满足现代需求。本文介绍了一种基于Java和JSP技术开发的电子医疗记录管理平台,旨在提高医疗行业的信息化水平和管理效率。该平台通过整合先进的数据库技术和Web开发框架,实现了医疗记录的高效存储、查询和管理,为医护人员提供了便捷的操作界面和强大的数据支持。 ... [详细]
  • 在数据库管理中,计算字段(也称为计算列)是一种重要的技术手段。计算字段通过在表定义中使用表达式或函数,自动生成并存储计算结果,从而提高查询效率和数据一致性。本文将详细介绍计算字段的创建方法、优化技巧及其在实际应用中的案例,帮助读者更好地理解和运用这一功能。 ... [详细]
  • 在探讨如何高效处理大规模数据报表的分页展示之前,首先需要明确导致报表加载缓慢的主要原因。通常情况下,这主要是由于两个方面:一是查询条件过于宽泛,使得数据库返回的结果集包含数百万甚至更多的记录;二是前端渲染性能不足,无法高效处理大量数据。为了优化这一过程,可以从以下几个方面入手:优化查询条件,减少不必要的数据返回;采用分页查询技术,每次仅加载所需的数据;利用缓存机制,减少对数据库的频繁访问;提升前端渲染效率,使用虚拟滚动等技术提高用户体验。 ... [详细]
  • 最近,我在CentOS 5服务器上成功部署了GForge 5.7 Community Edition。与Advanced Server版本相比,虽然功能略有简化,但仍然能够满足大多数开源项目管理的需求。为了确保数据安全,我开发了一套全自动备份脚本,该脚本能够定期备份GForge的数据和配置文件,并将其存储在远程服务器上,以防止数据丢失。此外,该脚本还具备错误检测和日志记录功能,便于故障排查和维护。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • Issue with the Reserved Term HOSTS in System Configuration ... [详细]
  • 在开发系统查询搜索功能时,需注意以下几点以提高信息检索效率:首先,在SQL语句中,每个参数占位符“?”后必须紧跟相应的参数赋值,确保参数与赋值一一对应,避免因参数不匹配导致的错误。其次,进行模糊搜索时,若用户输入通配符“%”,可能会导致全表扫描,因此需要对输入的“%”进行特殊处理或限制,以防止不必要的性能开销。此外,建议使用索引优化查询速度,并合理设计搜索逻辑,以提升用户体验。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 开发心得:深入探讨Servlet、Dubbo与MyBatis中的责任链模式应用
    开发心得:深入探讨Servlet、Dubbo与MyBatis中的责任链模式应用 ... [详细]
  • 深入解析:Explain命令的应用与字段详解
    深入解析:Explain命令的应用与字段详解 ... [详细]
  • 本文详细解析了如何使用 jQuery 实现一个在浏览器地址栏运行的射击游戏。通过源代码分析,展示了关键的 JavaScript 技术和实现方法,并提供了在线演示链接供读者参考。此外,还介绍了如何在 Visual Studio Code 中进行开发和调试,为开发者提供了实用的技巧和建议。 ... [详细]
  • 如何运用蒙特卡洛方法计算NPV:计算机专业毕业设计遇到难题怎么办?
    许多计算机科学专业的学生在大学期间都会遇到这样的困扰:课堂上教授的内容往往偏向理论,实际应用的知识点讲解得较为浅显和概括,导致在进行毕业设计时,如运用蒙特卡洛方法计算净现值(NPV)等复杂问题时感到无从下手。本文旨在探讨如何通过深入理解和实践蒙特卡洛模拟技术,解决这类计算难题,为学生的毕业设计提供实用指导。 ... [详细]
  • 数据仓库架构中缓慢变化维度的优化设计策略
    在数据仓库架构中,缓慢变化维度(SCD)是一种广泛应用的技术手段。该技术处理的是那些随时间逐步变化的维度属性,确保在进行商业智能(BI)分析时能够准确反映特定历史时间点的数据状态。通过合理设计SCD,可以有效提升数据仓库的性能与准确性,同时简化数据管理和维护流程。 ... [详细]
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社区 版权所有