CUBE、ROLLUP 、COMPUTE 使用详解

hive中rollup、cube使用方法 当我们业务中需要根据多个维度或者多个粒度统计分析数据的时候,最笨的办法是多次group by 然后union all到一起,这个时候其实可以用rollup、cube来实现,当然要了解这两个函数的原理,如果觉得结果比我们想要的结果多一些,那可以通过grouping sets 灵活的设置分组字段。...... 阅读详情
用 CUBE 汇总数据 CUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据的扩展,事实数据即记录个别事件的数据。扩展建立在用户打算分析的列上。这些列被称为维。多维数据集是一个结果集,其中包含了各维度的所有可能组合的交叉表格。 CUBE 运算符在 SELECT 语句的 GROUP BY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。GROUP BY 应指定维度列和关键字 WITH CUBE。结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值。 例如,一个简单的表 Inventory 中包含: Item                 Color                Quantity                  -------------------- -------------------- ---------- Table                Blue                 124                       Table                Red                  223                       Chair                Blue                 101                       Chair                Red                  210                       下列查询返回的结果集中,将包含 Item 和 Color 的所有可能组合的 Quantity 小计: SELECT Item, Color, SUM(Quantity) AS QtySum FROM Inventory GROUP BY Item, Color WITH CUBE 下面是结果集: Item                 Color                QtySum                    -------------------- -------------------- --------- Chair                Blue                 101.00                    Chair                Red                  210.00                    Chair                (null)               311.00                    Table                Blue                 124.00                    Table                Red                  223.00                    Table                (null)               347.00                    (null)               (null)               658.00                    (null)               Blue                 225.00                    (null)               Red                  433.00                    我们着重考查下列各行: Chair                (null)               311.00                    这一行报告了 Item 维度中值为 Chair 的所有行的小计。对 Color 维度返回了 NULL 值,表示该行所报告的聚合包括 Color 维度为任意值的行。 Table                (null)               347.00                    这一行类似,但报告的是 Item 维度中值为 Table 的所有行的小计。 (null)               (null)               658.00                    这一行报告了多维数据集的总计。Item 和 Color 维度的值都是 NULL,表示两个维度中的所有值都汇总在该行中。 (null)               Blue                 225.00                    (null)               Red                  433.00                    这两行报告了 Color 维度的小计。两行中的 Item 维度值都是 NULL,表示聚合数据来自 Item 维度为任意值的行。 使用 GROUPING 区分空值 CUBE 操作所生成的空值带来一个问题:如何区分 CUBE 操作所生成的 NULL 值和从实际数据中返回的 NULL 值?这个问题可用 GROUPING 函数解决。如果列中的值来自事实数据,则 GROUPING 函数返回 0;如果列中的值是 CUBE 操作所生成的 NULL,则返回 1。在 CUBE 操作中,所生成的 NULL 代表全体值。可将 SELECT 语句写成使用 GROUPING 函数将所生成的 NULL 替换为字符串 ALL。因为事实数据中的 NULL 表明数据值未知,所以 SELECT 语句还可译码为返回字符串 UNKNOWN 替代来自事实数据的 NULL。例如: SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'             ELSE ISNULL(Item, 'UNKNOWN')        END AS Item,        CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'             ELSE ISNULL(Color, 'UNKNOWN')        END AS Color,        SUM(Quantity) AS QtySum FROM Inventory GROUP BY Item, Color WITH CUBE 多维数据集 CUBE 运算符可用于生成 n 维的多维数据集,即具有任意数目维度的多维数据集。只有一个维度的多维数据集可用于生成合计,例如: SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'             ELSE ISNULL(Item, 'UNKNOWN')        END AS Item,        SUM(Quantity) AS QtySum FROM Inventory GROUP BY Item WITH CUBE GO 此 SELECT 语句返回的结果集既显示了 Item 中每个值的小计,也显示了 Item 中所有值的总计: Item                 QtySum                    -------------------- ---------- Chair                311.00                    Table                347.00                    ALL                  658.00                    包含带有许多维度的 CUBE 的 SELECT 语句可能生成很大的结果集,因为这些语句会为所有维度中值的所有组合生成行。这些大结果集包含的数据可能过多而不易于阅读和理解。这个问题有一种解决办法是将 SELECT 语句放在视图中: CREATE VIEW InvCube AS SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'             ELSE ISNULL(Item, 'UNKNOWN')        END AS Item,        CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'             ELSE ISNULL(Color, 'UNKNOWN')        END AS Color,        SUM(Quantity) AS QtySum FROM Inventory GROUP BY Item, Color WITH CUBE 然后即可用该视图来只查询您感兴趣的维度值: SELECT * FROM InvCube WHERE Item = 'Chair'   AND Color = 'ALL' Item                 Color                QtySum                    -------------------- -------------------- --------- Chair                ALL                  311.00                    (1 row(s) affected) 用 ROLLUP 汇总数据在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。有关更多信息,请参见用 CUBE 汇总数据。 CUBE 和 ROLLUP 之间的区别在于: CUBE 生成的结果集显示了所选列中值的所有组合的聚合。ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。 例如,简单表 Inventory 中包含:Item                 Color                Quantity                  -------------------- -------------------- ------ Table                Blue                 124                       Table                Red                  223                       Chair                Blue                 101                       Chair                Red                  210                       下列查询将生成小计报表:SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'             ELSE ISNULL(Item, 'UNKNOWN')        END AS Item,        CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'             ELSE ISNULL(Color, 'UNKNOWN')        END AS Color,        SUM(Quantity) AS QtySum FROM Inventory GROUP BY Item, Color WITH ROLLUP Item                 Color                QtySum                    -------------------- -------------------- ------ Chair                Blue                 101.00                    Chair                Red                  210.00                    Chair                ALL                  311.00                    Table                Blue                 124.00                    Table                Red                  223.00                    Table                ALL                  347.00                    ALL                  ALL                  658.00                    (7 row(s) affected) 如 果查询中的 ROLLUP 关键字更改为 CUBE,那么 CUBE 结果集与上述结果相同,只是在结果集的末尾还会返回下列两行:ALL                  Blue                 225.00                    ALL                  Red                  433.00                    CUBE 操作为 Item 和 Color 中值的可能组合生成行。例如,CUBE 不仅报告与 Item 值 Chair 相组合的 Color 值的所有可能组合(Red、Blue 和 Red + Blue),而且报告与 Color 值 Red 相组合的 Item 值的所有可能组合(Chair、Table 和 Chair + Table)。对于 GROUP BY 子句中右边的列中的每个值,ROLLUP 操作并不报告左边一列(或左边各列)中值的所有可能组合。例如,ROLLUP 并不对每个 Color 值报告 Item 值的所有可能组合。ROLLUP 操作的结果集具有类似于 COMPUTE BY 所返回结果集的功能;然而,ROLLUP 具有下列优点: ROLLUP 返回单个结果集;COMPUTE BY 返回多个结果集,而多个结果集会增加应用程序代码的复杂性。ROLLUP 可以在服务器游标中使用;COMPUTE BY 不可以。有时,查询优化器为 ROLLUP 生成的执行计划比为 COMPUTE BY 生成的更为高效。 用 COMPUTE 和 COMPUTE BY 汇总数据 提供 COMPUTE 和 COMPUTE BY 是为了向后兼容。请改为使用下列组件: Microsoft? SQL Server? 2000 Analysis Services 和用于 Analysis Services 的 OLE DB 或 Microsoft ActiveX? 数据对象(多维)(ADO MD) 一起使用。有关更多信息,请参见 Microsoft SQL Server? 2000 Analysis Services。 COMPUTE BY 子句使您得以用同一 SELECT 语句既查看明细行,又查看汇总行。可以计算子组的汇总值,也可以计算整个结果集的汇总值。 COMPUTE 子句需要下列信息: 可选的 BY 关键字,该关键字可按对一列计算指定的行聚合。 行聚合函数名称;例如,SUM、AVG、MIN、MAX 或 COUNT。 要对其执行行聚合函数的列。 COMPUTE 生成的结果集 COMPUTE 所生成的汇总值在查询结果中显示为分离的结果集。包括 COMPUTE 子句的查询的结果类似于控制中断报表,即汇总值由指定的组(或称中断)控制的报表。可以为各组生成汇总值,也可以对同一组计算多个聚合函数。 当 COMPUTE 带有可选的 BY 子句时,符合 SELECT 条件的每个组都有两个结果集: 每个组的第一个结果集是明细行集,其中包含该组的选择列表信息。 每个组的第二个结果集有一行,其中包含该组的 COMPUTE 子句中所指定的聚合函数的小计。 当 COMPUTE 不带可选的 BY 子句时,SELECT 语句有两个结果集: 每个组的第一个结果集是包含选择列表信息的所有明细行。 第二个结果集有一行,其中包含 COMPUTE 子句中所指定的聚合函数的合计。 COMPUTE 用法示例 下列 SELECT 语句使用简单 COMPUTE 子句生成 titles 表中 price 及 advance 的求和总计: USE pubs SELECT type, price, advance FROM titles ORDER BY type COMPUTE SUM(price), SUM(advance) 下列查询在 COMPUTE 子句中加入可选的 BY 关键字,以生成每个组的小计: USE pubs SELECT type, price, advance FROM titles ORDER BY type COMPUTE SUM(price), SUM(advance) BY type 此 SELECT 语句的结果用 12 个结果集返回,六个组中的每个组都有两个结果集。每个组的第一个结果集是一个行集,其中包含选择列表中所请求的信息。每个组的第二个结果集包含 COMPUTE 子句中两个 SUM 函数的小计。 说明  一些实用工具(如 osql)显示多个小计或合计聚合汇总的方式可能会使用户以为每个小计都是结果集中的单独一行。这是由于该实用工具设置输出格式的方式;小计或合计聚合返回时单独占用一行。其它应用程序(如 SQL 查询分析器)将多个聚合设置在同一行。 比较 COMPUTE 和 GROUP BY COMPUTE 和 GROUP BY 之间的区别汇总如下: GROUP BY 生成单个结果集。每个组都有一个只包含分组依据列和显示该组子聚合的聚合函数的行。选择列表只能包含分组依据列和聚合函数。 COMPUTE 生成多个结果集。一类结果集包含每个组的明细行,其中包含选择列表中的表达式。另一类结果集包含组的子聚合,或 SELECT 语句的总聚合。选择列表可包含除分组依据列或聚合函数之外的其它表达式。聚合函数在 COMPUTE 子句中指定,而不是在选择列表中。 下列查询使用 GROUP BY 和聚合函数;该查询将返回一个结果集,其中每个组有一行,该行中包含该组的聚合小计: USE pubs SELECT type, SUM(price), SUM(advance) FROM titles GROUP BY type 说明  在 COMPUTE 或 COMPUTE BY 子句中,不能包含 ntext、text 或 image 数据类型。
5、 数据汇总的艺术:掌握SQL Server中的GROUP BY、CUBE、ROLLUP和COMPUTE 本文深入探讨了SQL Server中GROUP BY、CUBE、ROLLUP和COMPUTE等数据汇总工具的使用方法及应用场景,结合实际案例讲解了复杂聚合需求的处理方式,并提供了查询性能优化和最佳实践建议,帮助读者在数据处理和分析领域更加得心应手。 阅读详情

相关推荐

OpenHarmony实战开发-如何实现文件分布式同步编辑

在分布式文件场景中,分布式设备管理包含了分布式设备搜索、分布式设备列表弹窗、远端设备拉起三部分。首先在分布式组网内搜索设备,然后把设备展示到分布式设备列表弹窗中,最后根据用户的选择拉起远端设备。两台设备组网的分布式场景是工作中常常需要的。这样的分布式场景有助于加快工作效率,减少工作中的冗余,本例将为大家介绍如何实现上述功能。​ (2)订阅分布式数据变化:通过this.distributedObject.on(‘status’, this.statusCallback)监听分布式数据对象的变更。

2401_82546228的博客 751

SQL中CUBE 用法

CUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据(即记录个别事件的数据)的扩展。扩展是基于用户要分析的列建立的。这些列称为维度。多维数据集是结果集,其中包含各维度的所有可能组合的交叉表格。 CUBE 运算符在 SELECT 语句的 GROUP BY 子句中指定。该语句的选择列表包含维度列和聚合函数表达式。GROUP BY 指定了维度列和关键字 WITH CUBE。结果集包含维度列中

4803

普元EOS8.3精简版安装指南:从零开始搭建低代码开发环境

本文详细介绍了普元EOS8.3精简版的完整安装流程。从JDK1.8环境准备、MySQL数据库配置与初始化,到核心配置文件修改、服务启动与登录验证,提供了从零开始搭建低代码开发环境的清晰步骤和常见问题排坑指南,帮助开发者快速部署并体验平台核心功能。

ik678901的博客 1102

MaxCompute - ODPS重装上阵 第七弹 - Grouping Set, Cube and Rollup

MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务。 MaxCompute除了持续优化性能外,也致力于提升SQL语言的用户体验和表达能力,提高广大ODPS开发者的生产力。 MaxCompute基于ODPS2.0新一代的SQL引擎,显著提升了SQL语言编译过程的易用性与语言的表达能力。我们在此推出Max...

数据库技术 1027

解决UE5像素流三大痛点:鼠标锁定/双光标/自动播放(附app.js魔改指南)

本文针对UE5像素流服务在实际应用中常见的鼠标锁定、双光标和自动播放三大交互痛点,提供了深入的技术分析和解决方案。通过详细解析app.js源码,指导开发者如何修改控制方案、修复光标显示以及实现静音自动播放,旨在提升Pixel Streaming应用的用户体验与专业度。

weixin_28025327的博客 382

ADC电路项目1——10bit SAR ADC 设计,smic18工艺,有工艺库,有效位数ENOB为9.8

包括详细仿真文档,原理介绍,完整电路图,仿真参数已设好,可直接使用,在自己的电脑上就可以运行仿真。本设计采用 smic18mmrf CMOS 工艺,使用栅压自举电路的采样开关,Vcm-based 开关。电容开关控制电路,10 位 DFF,最后用 10 位理想 DAC 模块将数字码转换为 10 进制量进。时序上级板采样的 DAC 电容阵列,两级动态比较器,比较器异步时钟,SAR 动态逻辑,DAC。10bit SAR ADC 设计,smic18工艺,有工艺库,有效位数ENOB为9.8。

qq_48407979的博客 814

MaxCompute - ODPS重装上阵 第六弹 - User Defined Type

MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务。 MaxCompute除了持续优化性能外,也致力于提升SQL语言的用户体验和表达能力,提高广大ODPS开发者的生产力。 MaxCompute基于ODPS2.0新一代的SQL引擎,显著提升了SQL语言编译过程的易用性与语言的表达能力。我们在此推出Max...

数据库技术 463

Android SSL证书固定实战:原理、方案与避坑指南

SSL/TLS协议是保障网络通信安全的基石,其核心原理是通过非对称加密和数字证书实现身份认证与数据加密。在移动应用开发中,为了防止中间人攻击,证书固定技术应运而生,它通过将服务器证书或公钥的哈希值预置在应用内,强制校验服务器身份,从而大幅提升通信链路的安全性。这一技术对于金融、电商等高安全要求场景尤为重要。本文聚焦Android平台,深入解析SPKI固定、Network Security Configuration与OkHttp CertificatePinner等主流方案,并针对证书更新、调试兼容等常见痛

weixin_33935636的博客 402

有关ROLLUP,CUBE,GROUPING,COMPUTE,COMPUTE BY的用法

1.ROLLUPselect item,color,sum(qty) qtysum from tb group by item,color with rollup/*item       color      qtysum      ---------- ---------- ----------- Chair      Blue       100Chair      R

winnie_ju的专栏 487

Win10或Win11电脑找不到以太网网络适配器的解决方法

Win10或Win11电脑找不到以太网网络适配器的解决方法

Robot_PLC_HMI_Automation 654

ZYNQ GP总线实现PS与PL交互

3,完成 ZYNQ7 Processing System 的配置更改后,回到 Diagram 界面中,可以看到新出现了名为 M_AXI_GP0_ACLK、M_AXI_GP0 和 FCLK_CLK0 的接口,下面我们要对这些接口进行连接或引出。此处的偏移量,AXI的相邻寄存器偏移量相差4个字节,默认slv_reg0的偏移量是0,可以推导出slv_reg1,slv_reg2的偏移量分别为4和8,这里只用到了slv_reg0,所以偏移量为0。当然了,窗口数量的增加,势必会使得单个窗口的采样深度变小。

wangjie36的博客 7094

分类汇总compute,compute by,with rollup,with cube使用示例

if object_id([tb]) is not null drop table [tb]gocreate table [tb]([部门] varchar(7),[电话] varchar(20),[金额] int)insert [tb]select 营业部,8001,20 union allselect 营业部,8002,30 union allselect 财务部,6001,1

faunjoe的专栏 477

【Unity实战】实现最完美最简单的UI适配方案,背景压缩或者拉伸变形解决方案,手机刘海屏适配,适配不同分辨率,不同尺寸,不同设备。

这期来讲一个简单的UI设计方案,很多同学可能搞不懂锚点、轴心这些概念,导致做好的UI在别人的设备上,乱跑或者是重叠,或者是参加游戏老发时间比较紧来不及做适配,都可以来试试这个方法,通过填充边框来保持游戏画面的原始比例,所以它的缺点也很明显,在一些移动设备上会浪费比较大的显示面积。 unity不同设备UI变形? UI在不同设备上如何适配?

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3650

SQL CUBE、ROLLUP 、COMPUTE 使用详解

(1)用 CUBE 汇总数据 CUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据的扩展,事实数据即记录个别事件的数据。扩展建立在用户打算分析的列上。这些列被称为维。多维数据集是一个结果集,其中包含了各维度的所有可能组合的交叉表格。 CUBE 运算符在 select语句的 GROUP BY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。GROUP BY 应指定维度列和

chengs_的专栏 1865

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

mssql的GROUPING,ROLLUP,CUBE,COMPUTE 和COMPUTE BY

http://msdn.microsoft.com/zh-cn/library/ms175939(v=sql.90) 使用 CUBE 汇总数据 http://msdn.microsoft.com/zh-cn/library/...

cnb2014的博客 267

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

转CUBE、ROLLUP 、COMPUTE 使用详解 - 优快云Blog

导读:  用 CUBE 汇总数据  CUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据的扩展,事实数据即记录个别事件的数据。扩展建立在用户打算分析的列上。这些列被称为维。多维数据集是一个结果集,其中包含了各维度的所有可能组合的交叉表格。  CUBE 运算符在 SELECT 语句的 GROUP BY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。GROUP BY

403

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

mysql分组聚合compute,今天用实例总结一下group by的用法。归纳一下:group by:ALL ,Cube,RollUP,Compute,Compute by创建数据脚本C...

今天用实例总结一下group by的用法。归纳一下:group by:ALL ,Cube,RollUP,Compute,Compute by创建数据脚本Create Table SalesInfo(Ctiy nvarchar(50),OrderDate datetime,OrderID int)insert into SalesInfoselect N'北京','2014-06-09',1001u...

weixin_42588877的博客 575

BREAK ON 与compute语句的使用技巧

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、C)进行GROUP BY,然后依次是(A、B)

heqiyu34的专栏 1846

有关rollup和cube的使用方法讨论

-- 分类查询查询描述 --rollup 操作符:选列中值的某一层次结构的聚合,返回单个结果集 --cube 操作符:所选列中所有组合的聚合,返回单个结果集 --grouping 操作符:判断结果集中的值是本来就有的,还是使用了 rollup 或 cube 以后产生的 --compute 子句:不支持 ...

dongemen5245的博客 192

SQL SERVER中的union,cube,rollup和cumpute运算符

<br />UNION 运算符是将两个或更多查询的结果组合为单个结果集 <br />该结果集包含联合查询中的所有查询的全部行。这与使用联接组合两个表中的列不同。 <br />使用 UNION 组合查询的结果集有两个最基本的规则: <br />1。所有查询中的列数和列的顺序必须相同。 <br />2。数据类型必须兼容 <br />a.UNION的结果集列名与第一个select语句中的结果集中的列名相同,其他select语句的结果集列名被忽略 <br />b.默认情况下,UNION 运算符是从结果集中删除重复行

lingling3733的专栏 732

SQL SERVER2000教程-第五章 处理数据 第七节 使用COMPUTE和COMPUTE BY对数据进行汇总...

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。[url]http://chenxing.blog.51cto.com/240526/44596[/url] COMPUTE子句使用聚合函数生成数据的汇总值。COMPUTE和COMPUTE BY子句之间的区别在于COM...

weixin_34355881的博客 233
上一篇: SQL中用replace来操作ntext,text字段
下一篇: SQL SERVER事务处理
comeon_data
博客等级 码龄22年 15粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值