`

《Pro Oracle SQL》Chapter7 --7.6Eliminate NULLs with the GROUPING() Function

阅读更多

7.6 Eliminate NULLs with the GROUPING() Function  用GROUPING()函数消除NULL值  (page 207)
    There seems to be a problem with the output from the new query seen in Listing 7-12.  While the
numbers match the earlier query that used the UNION ALL operator, some of the rows have NULL values for the CUST_INCOME_LEVEL and AGE_RANGE rows, and one row has a NULL in both of these columns.  You saw this type of result earlier in Table 7-1 as an expected part of the operation of CUBE.  When generating the combinations of all columns included in the arguments to CUBE, a NULL value will be generated n-1 times for each column, where n is the number of columns in the list. In the example query, there are two columns, so you can expect to see a NULL value for CUST_INCOME_LEVEL generated once for each distinct value of AGE_RANGE. The same rule applies to the AGE_RANGE column.    
    在列表7-12中的新查询的输出似乎有点问题。虽然数量上匹配之前的使用UNION ALL运算符的查询,一些行的CUST_INCOME_LEVEL 和 AGE_RANGE 列包含NULL值,或者它们中的之一包含NULL值。你在之前的表7-1中看到过这种结果,它是CUBE运算意料之中的部分。当生成包含在CUBE参数中的所有列的组合时,对每列而言NULL值将被生成n-1次,这里n是CUBE参数列表的参数个数。 在例子查询中,有两列,这样你就能估计对于每一个AGE_RANGE的distinct值都为CUST_INCOME_LEVEL生成一个NULL值。对于AGE_RANGE列应用同样的规则。
    These NULL values* can be a problem if there are rows in the data that have NULL values for either of these columns. How do you discern between NULLs in the data and NULLs inserted by the CUBE extension?  The GROUPING() function was introduced in Oracle 8i, and it may be used to identify these superaggregate rows.  The expression used as an argument to the GROUPING() function must match an expression that appears in the GROUP BY clause.  For example, write decode(grouping(age_range),1,'ALL AGE',age_range) age_range to detect whether age_range is null due to a row generated by CUBE, or whether it is null due to a row in the database.  The value returned will be a 1 if the current row is a superaggregate row generated by CUBE, and a 0 for all other cases.    (* The NVL() function is used to provide a default value for sh.customers.cust_income_level so that output of examples may be easier to compare. )
    NULL值是个问题,如果数据行中的某些列里的数据本身就是NULL值。你如何辨别数据中的NULL值和是被CUBE扩展插入的NULL值?GROUPING()函数至从Oracle8i引入,它可用于辨别这些超聚集行。GROUPING()函数作为 表达式的 参数使用必须匹配出现在GROUP BY子句中的一个表达式。 例如,写decode(grouping(age_range),1,'ALL AGE',age_range) age_range用于检测是否age_range是因为由CUBE产生的行的null,或者是否它是因为数据库行(本身)是null。如果当前行是一个由CUBE生成的超聚集行返回的值将是1,其它情况返回的是0。 (*NVL()函数用来为sh.customers.cust_income_level提供一个默认值方便例子输出中的比较。)
    When used in combination with a CASE expression or the DECODE() function, the NULL values in
superaggregate rows can be replaced with values that are useful in a report. In this case, the DECODE() appears to be a better choice due to simplicity and the fact that there are only two possible return values for the  GROUPING() function.   Listing 7-13 shows show how GROUPING() was used to modify the SQL found in Listing 7-12. The relevant before and after parts of the SQL are shown, along with the output.  Now the report is easier to read, and superaggregate NULLs are discernable from NULLs occurring in the data. 
    当连同CASE表达式或者DECODE()函数一起使用时,在超聚集行的NULL值就能被替换成报告中有用的值了。这时候,DECODE()看起来是更好的选择因为它简单,而且事实上GROUPING()函数只有两种可能的返回值。列表7-13展示了GROUPING()是如何用于修改列表7-12中的SQL的。给出了相关SQL的前后对比,以及输出。现在报告更容易读了,超聚合的NULL值能同数据中存在的NULL值区分了。

Listing 7-13. GROUPING() Function
Without GROUPING():
 
27    , cust_income_level
28    , age_range
 
With GROUPING():
 
27    -- either CASE or DECODE() works here. I prefer DECODE() for this
28    , case grouping(cust_income_level)
29        when 1 then 'ALL INCOME'
30        else cust_income_level
31      end cust_income_level
32    , decode(grouping(age_range),1,'ALL AGE',age_range) age_range
 
QUERY                                                      AGE
TAG    PRODUCT CATEGORY               INCOME LEVEL         RANGE             PROFIT
------ ------------------------------ -------------------- -------- --------------- 
...
Q2     Hardware                       K: 250,000 - 299,999 ALL AGE       $26,678.00
Q2     Hardware                       L: 300,000 and above ALL AGE       $28,974.28
Q1     Hardware                       F: 110,000 - 129,999 70-80         $30,477.16
Q2     Hardware                       J: 190,000 - 249,999 ALL AGE       $43,761.47
Q2     Hardware                       B: 30,000 - 49,999   ALL AGE       $53,612.04
Q2     Hardware                       A: Below 30,000      ALL AGE       $55,167.88
Q2     Hardware                       I: 170,000 - 189,999 ALL AGE       $57,089.05
Q2     Hardware                       C: 50,000 - 69,999   ALL AGE       $76,612.64
Q3     Hardware                       ALL INCOME           60-70         $85,314.04
Q3     Hardware                       ALL INCOME           10-20         $90,849.87 
Q3     Hardware                       ALL INCOME           0-10          $92,207.47
Q3     Hardware                       ALL INCOME           50-60         $93,811.96
Q3     Hardware                       ALL INCOME           80-90         $95,391.82
Q2     Hardware                       H: 150,000 - 169,999 ALL AGE       $95,437.74
Q3     Hardware                       ALL INCOME           40-50         $97,492.51
Q3     Hardware                       ALL INCOME           20-30        $101,140.69
Q2     Hardware                       D: 70,000 - 89,999   ALL AGE      $102,940.44
Q3     Hardware                       ALL INCOME           30-40        $102,946.85
Q3     Hardware                       ALL INCOME           90-100       $110,310.69
Q2     Hardware                       G: 130,000 - 149,999 ALL AGE      $112,688.64
Q3     Hardware                       ALL INCOME           70-80        $117,920.88
Q2     Hardware                       E: 90,000 - 109,999  ALL AGE      $135,154.59
Q2     Hardware                       F: 110,000 - 129,999 ALL AGE      $199,270.01
Q4     Hardware                       ALL INCOME           ALL AGE      $987,386.78 

0
1
分享到:
评论

相关推荐

    基于Andorid的电子杂志应用系统设计.zip

    基于Andorid的电子杂志应用系统设计实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。

    《网络传播技术与实务》第10章-握在手中的网络——移动通信与无线网络技术.ppt

    《网络传播技术与实务》第10章-握在手中的网络——移动通信与无线网络技术.ppt

    基于COMSOL的电磁传感器用于螺孔缺陷检测的建模与仿真

    内容概要:本文详细介绍了如何利用COMSOL Multiphysics进行螺孔缺陷检测的电磁传感器建模与仿真。首先,通过参数化建模创建带有螺纹孔的金属块,并在螺纹根部引入微小V型槽作为缺陷。接着,设置了材料属性,特别是针对缺陷区域的非线性磁导率变化进行了细致调整。然后,配置了物理场环境,包括激活AC/DC模块的电流和磁场接口,设定合适的边界条件和激励电流频率范围。网格划分采用了自适应策略,确保缺陷区域的高分辨率。求解器设置为频域稳态求解,并通过后处理展示了缺陷处的电磁场分布特性,如电场强度突变和涡流密度矢量图。此外,还讨论了实际应用中的注意事项和技术细节,如表面粗糙度的影响、频率选择以及结果验证方法。 适合人群:从事无损检测、电磁仿真研究的技术人员,以及有一定COMSOL使用经验的研发人员。 使用场景及目标:适用于工业生产中对螺孔内部微小裂纹的精确检测,旨在提高产品质量和安全性,防止因隐蔽缺陷导致的重大事故发生。 其他说明:文中提供了大量具体的MATLAB和COMSOL命令代码片段,帮助读者快速复现实验步骤并深入理解每个环节的设计意图。同时强调了实际操作中的常见陷阱及其应对措施,使读者能够更好地掌握这一复杂技术的应用要点。

    【ABB机器人】-IRB1600机器人维护信息.pdf

    【ABB机器人】-IRB1600机器人维护信息.pdf

    《计算机网络基础》第2章-数据通信.ppt

    《计算机网络基础》第2章-数据通信.ppt

    rubyinstaller-devkit-3.4.3-1-x64

    ruby-3.4.3-windows-x64安装包

    声子晶体中声表面波的光学特性及其应用研究

    内容概要:本文详细探讨了声子晶体中声表面波的光学特性。声子晶体作为一种人工复合材料,能够对弹性波(即声子)进行独特调控。文中介绍了声子晶体的基础原理,包括其周期性结构产生的带隙效应,以及声表面波与其相互作用时发生的折射、反射等光学类比现象。此外,还讨论了声子晶体在传感器、通信等领域的潜在应用,特别是在构建声表面波滤波器方面的重要意义。文章通过具体的Python和MATLAB代码展示了如何模拟声子晶体的结构和声表面波的传播特性,并解释了带隙形成的物理机制。同时,强调了几何对称性和材料参数对声波调控的影响,提出了优化仿真的方法和技术。 适合人群:从事材料科学、物理学及相关领域的研究人员,尤其是对声子晶体和声表面波感兴趣的学者和技术人员。 使用场景及目标:适用于希望深入了解声子晶体声表面波光学特性的科研工作者,旨在帮助他们掌握相关理论知识和数值模拟技能,从而应用于新型声学器件的设计和开发。 其他说明:文章提供了多个实例和代码片段,便于读者理解和实践。同时,指出了实验中常见的挑战和解决方案,如材料损耗建模、缺陷引入等,有助于提高仿真的准确性。

    机械工程电梯柔性提升系统横向-纵向耦合动力学建模与仿真:基于Galerkin法的振动控制分析及工程应用(含详细代码及解释)

    内容概要:本文详细介绍了电梯柔性提升系统横向-纵向耦合动力学建模与仿真的全过程。首先,基于能量法和Hamilton原理,建立了考虑平衡绳影响的横向-纵向耦合振动控制方程,并使用Galerkin法将其离散化为常微分方程。随后,通过Python代码实现并仿真了高速电梯参数下的振动响应,分析了平衡绳和导轨不平顺对系统振动的具体影响。研究结果显示,平衡绳能有效抑制横向振动(上行降低20%,下行降低5%),但对纵向振动有一定影响;而导轨不平顺会导致横向振动突变,对纵向振动影响较小。最终,通过数值仿真验证了论文中的主要结论,为电梯振动控制提供了理论依据和工程建议。 适合人群:具备一定力学和编程基础,对机械振动、电梯工程感兴趣的科研人员和工程师。 使用场景及目标:①理解电梯柔性提升系统的振动特性及其影响因素;②掌握基于能量法和Hamilton原理建立复杂系统动力学模型的方法;③学习如何使用Galerkin法离散化偏微分方程并进行数值仿真;④为电梯系统的设计优化提供参考,特别是平衡绳和导轨安装精度的控制。 其他说明:本文不仅提供了理论分析,还通过详细的Python代码展示了完整的仿真流程,便于读者动手实践。研究结果强调了平衡绳和导轨不平顺对电梯振动的重要影响,提出了具体的设计建议,如安装平衡绳以抑制横向振动、严格控制导轨安装精度等。此外,文中还验证了钢丝绳的安全系数,确保仿真条件符合工程实际。

    《网络规划与设计教程》第二章:网络互联技术概述.ppt

    《网络规划与设计教程》第二章:网络互联技术概述

    电力电子领域单相Boost PFC电路的双闭环控制仿真模型及其实现方法

    内容概要:本文详细介绍了单相Boost功率因数校正(PFC)电路及其双闭环控制仿真模型的设计与实现。首先阐述了单相PFC电路的基础概念,解释了Boost电路的工作原理,即通过控制开关管的导通与关断来提升输入电压并实现功率因数校正。接着讨论了在网侧220V/50Hz条件下,如何利用电压外环电流内环双闭环控制系统确保输出电压稳定性和高功率因数。文中还提供了基于Python和MATLAB/Simulink的具体代码示例,展示了如何模拟Boost电路的行为以及构建双闭环控制策略。此外,针对可能出现的问题如启动时电压超调、电流波形畸变等提出了相应的解决方案和技术细节。 适合人群:从事电力电子系统设计的研究人员、工程师和技术爱好者,尤其是那些希望深入了解PFC技术和掌握相关仿真技能的人群。 使用场景及目标:适用于需要优化电力电子设备性能的应用场合,例如工业自动化、家用电器等领域。通过学习本文的内容,读者可以更好地理解和应用单相Boost PFC电路及其双闭环控制机制,从而提高产品的效率和可靠性。 其他说明:文中不仅包含了理论性的介绍,还有大量的实战经验和技巧分享,帮助读者更快地掌握这一复杂的技术领域。同时强调了在实际工程实践中应注意的关键点,如参数选择、波形调试等方面的知识。

    黑马程序员ThreeJS 3D车展效果展示(含素材源码)

    源文件

    《计算机程序设计(C语言)》第7章-第6节-变量的存储类别.ppt

    《计算机程序设计(C语言)》第7章-第6节-变量的存储类别.ppt

    《计算机程序设计(C语言)》第4章-第2节-if语句.ppt

    《计算机程序设计(C语言)》第4章-第2节-if语句.ppt

    FPGA领域Verilog实现串口通信:兼容Xilinx与Altera的收发模块设计与应用

    内容概要:本文详细介绍了基于FPGA的串口通信模块的设计与实现,涵盖波特率生成、发送模块的状态机设计以及接收模块的抗干扰措施。特别针对Xilinx和Altera两种主流FPGA平台进行了优化,确保代码可以在不同平台上无缝运行。文中不仅提供了完整的Verilog代码片段,还分享了许多实用的调试技巧,如波特率分频系数的精确计算、采样点的选择、跨平台复位信号的处理等。此外,作者还强调了硬件连接和约束文件配置的重要性,为初学者提供了一套完整的解决方案。 适合人群:对FPGA有一定了解,希望深入掌握串口通信机制的工程师和技术爱好者。 使用场景及目标:适用于需要在FPGA平台上实现可靠串口通信的应用场合,如嵌入式系统开发、工业自动化控制等领域。通过本教程的学习,读者能够独立完成串口通信模块的设计与调试,掌握关键技术和常见问题的解决方法。 其他说明:文章附带了经过验证的实际案例和代码,便于读者进行实践操作。同时提醒开发者注意电压匹配等问题,以防止硬件损坏。

    基于FX3U PLC与RS485通信板的多品牌变频器控制方案详解

    内容概要:本文详细介绍了使用FX3U PLC配合FX3U-485BD通信板对西门子V20、台达VFD-M和三菱E700三种变频器进行通信控制的方法。涵盖了硬件配置、接线方法、参数设置、程序编写等方面的内容。文中不仅提供了具体的接线步骤,还针对不同品牌的变频器给出了详细的参数配置指导,并附有简单的梯形图程序示例,帮助读者理解和实施变频器的精确控制。此外,文章还分享了一些实用的经验技巧,如解决通信不稳定等问题的方法。 适合人群:从事工业自动化领域的工程师和技术人员,特别是那些需要集成多个品牌变频器控制系统的人群。 使用场景及目标:适用于需要通过PLC对多种品牌变频器进行集中控制的应用场合,如工厂生产线、自动化设备等。主要目标是提高系统的灵活性和可靠性,减少维护成本,提升生产效率。 其他说明:文中提供的信息和案例有助于读者快速掌握PLC与变频器之间的通信控制技术,同时也强调了实际操作过程中需要注意的一些细节问题,如接线规范、参数匹配等。

    《组态软件控制技术》第7章--报表系统.ppt

    《组态软件控制技术》第7章--报表系统.ppt

    《网页制作基础教程(Dreamweaver-CS6版)》第6章-CSS与行为.pptx

    《网页制作基础教程(Dreamweaver-CS6版)》第6章-CSS与行为.pptx

    weixin286基于SSM框架的童装购买平台微信小程序+ssm(文档+源码)_kaic

    weixin286基于SSM框架的童装购买平台微信小程序+ssm(文档+源码)_kaic

    《计算机财务管理》01-02-资金时间价值.ppt

    《计算机财务管理》01-02-资金时间价值.ppt

Global site tag (gtag.js) - Google Analytics