ROLLUP和CUBE是SQL的扩展命令,可以在SQL Server 6.5(及以上版本)和Oracle 8i(及以上版本)中使用。
本文会为大家介绍如何将CUBE命令加载到SQL当中。我们将以北京的一家宠物超市的货源供应链为例,假设其数据表中包含了宠物商店供应链中有货源的宠物数量和类型:
表Pets
Type
|
Store
|
Number
|
狗
|
山东
|
12
|
猫
|
山东
|
18
|
龟
|
天津
|
4
|
狗
|
天津
|
14
|
猫
|
内蒙古
|
9
|
狗
|
内蒙古
|
5
|
龟
|
内蒙古
|
1
|
作为这家宠物超市的老板,我们希望能够迅速了解关于存货各个方面的情况。我们可以雇一个SQL程序员,编写一些查询命令好获得我们需要的确切数据。还好,我们的数据集不是很大,所以我们可以兴致勃勃地站在一旁查看这些原始数据。使用CUBE命令就能够切实满足我们对数据的渴求。以下就是相应的SQL实例:
SELECT Type, Store, SUM(Number) as Number FROM Pets GROUP BY type,store WITH CUBE |
执行该查询返回的结果如下:
Type
|
Store
|
Number
|
猫
|
山东
|
18
|
猫
|
内蒙古
|
9
|
猫
|
NULL
|
27
|
狗
|
山东
|
12
|
狗
|
内蒙古
|
5
|
狗
|
天津
|
14
|
狗
|
NULL
|
31
|
龟
|
内蒙古
|
1
|
龟
|
天津
|
4
|
龟
|
NULL
|
5
|
NULL
|
NULL
|
63
|
NULL
|
山东
|
30
|
NULL
|
内蒙古
|
15
|
NULL
|
天津
|
18
|
一下子多出了这么多的数据!请注意表中出现了很多额外的分组包括NULL行,这些绝不会出现在标准的GROUP BY命令所返回的结果中。它们都是CUBE指令所添加的汇总项。分析上面的结果数据,你会发现我们的供应链上还有27只猫、31只狗和5只龟,由三个不同地区的商店提供。山东店库存里的宠物数量最多,包含了目录里的30只宠物。
我们对每个地区店的宠物总数并不是很感兴趣,我们只是要一个包含每种类型宠物的来源及其总数的数据。使用ROLLUP 操作符代替CUBE 操作符就能排除掉那些在第一列包含了NULL 的结果数据。
SQL语法如下:
SELECT Type, Store, SUM(Number) as Number FROM Pets GROUP BY type,store WITH ROLLUP |
结果如下:
Type
|
Store
|
Number
|
猫
|
山东
|
18
|
猫
|
内蒙古
|
9
|
猫
|
NULL
|
27
|
狗
|
山东
|
12
|
狗
|
内蒙古
|
5
|
狗
|
天津
|
14
|
狗
|
NULL
|
31
|
龟
|
内蒙古
|
1
|
龟
|
天津
|
4
|
龟
|
NULL
|
5
|
NULL
|
NULL
|
63
|
以上是对CUBE和ROLLUP的一个简单介绍。
相关推荐
首先,我们来看一个简单的`ROLLUP`用法。假设有一个`DEPT`部门表和一个`EMP`员工表,我们需要计算每个部门的工资总和以及所有部门的总和。使用`UNION ALL`,我们可以分别对每个部门和所有部门进行分组,如下: ```...
总之,SQL中的字符处理函数和聚合函数如ROLLUP、CUBE、LAG、LEAD、RANK和DENSE_RANK为数据分析师提供了强大的工具,使得复杂的数据汇总和分析变得简单高效。掌握这些功能,可以显著提高数据处理的能力和效率,是每一...
下面我们将对 Oracle 分析函数进行详细的介绍和分析。 自动汇总函数 自动汇总函数包括 Rollup 和 Cube 两个函数。 * Rollup 函数:用于对数据进行分组和汇总,生成一个总的汇总结果。例如,使用 Rollup 函数可以...
`CUBE` 是 `GROUP BY` 的一个扩展,它会为所有可能的分组组合生成结果集。例如: ```sql SELECT cust_id, SUM(pay1) AS pay11 FROM pay_list GROUP BY cust_id WITH CUBE; ``` 上面的例子中,`WITH CUBE` 会生成按 `...
在多维数据分析领域,Mondrian 是一个开源的 OLAP (Online Analytical Processing) 服务器,它能够处理复杂的查询并提供高性能的数据分析能力。Schema 在 Mondrian 中扮演着核心的角色,它定义了多维数据库的结构,...
星型模型是一种中心化的模型,包括一个事实表和多个维表。雪花模型是一个扩展的星型模型,每个维表都可以进一步分解为多个子维表。雪花模型的优点是可以减少数据冗余,但是它也增加了模型的复杂度。 2. 数仓结构层次...
分组(GROUP BY)是另一个关键概念,允许按一个或多个列进行数据分组。例如,例4-2按商品类别编号`t_ID`分组,然后计算每个组的商品数量。若需进一步筛选,`WHERE`子句用于在分组前过滤数据,而`HAVING`子句则在分组...
cubify上的简单cubify和rollup方法。 对于每个输入元组 cubify 生成 2^n 个元组,其中 n 是我们正在立方的字段数 rollup 生成 n+1 个元组,其中 n 是我们正在汇总的字段数 开发 $ git clone ...
Rollup函数用于生成多级汇总数据,它可以创建一个类似于SQL GROUP BY语句的“GROUP BY GROUPING SETS”的效果。例如,可以计算每个区域、每个网络类型以及整个数据集的总费用。 Cube函数则更进一步,它不仅提供...
如窗口函数(ROW_NUMBER、RANK、DENSE_RANK等)用于对数据进行排序和分组计算,CUBE和ROLLUP用于生成多维汇总数据,PIVOT和UNPIVOT用于数据的行列转换。 以上是关于SQL和数据库的基础知识介绍,掌握了这些内容,就...
2. JOIN操作:如果FROM子句中有多个表,会继续对上一连接结果和下一个表进行JOIN,直至处理完所有表。 3. WHERE条件:在虚拟表VT3上应用WHERE子句(where_condition),只保留满足条件的行,生成VT4。WHERE条件是...
假设有一个员工表`employees`,包含部门ID、经理ID、员工ID、姓名、入职日期、薪资和职位ID等字段。为了展示分析函数的应用,考虑以下查询: ```sql SELECT department_id, manager_id, employee_id, first_name ||...
3. `rollup.config.js`:Rollup是一个JavaScript模块打包器,用于将小块代码编译成大块复杂应用,这里用于构建和优化PSV项目。 4. `.browserslistrc`:定义了项目的浏览器兼容性范围,帮助自动化CSS前缀和Babel等...
这不仅包括基本的分组查询、条件筛选,还涉及到了更高级的功能,如聚合函数的使用、ROLLUP和CUBE的区别等。 ### 一、排序:ORDER BY `ORDER BY`子句用于对结果集进行排序,可以按照一个或多个列的值进行升序(ASC...
Spark 是一个快速、通用且可扩展的大数据处理框架,而 Hadoop 是一个分布式存储和计算的开源框架。本资源包含的 Spark 3.0 和 Hadoop 2.7.1 的安装包,是用于搭建大数据处理环境的基础。 Spark 3.0 的主要特性包括...
如果指定了 GROUP BY,视图定义不能包含 HAVING、CUBE 或 ROLLUP。 总的来说,索引视图提供了一种优化查询性能的方法,尤其是对于频繁使用的复杂查询。然而,使用它们需要谨慎,因为它们可能会增加存储需求,并可能...
例如,一个简单的销售数据仓库可能包含供应商(Supplier)、零件(Part)和客户(Customer)等表。表T展示了供应商供应的零件被以不同的销售价格出售给客户的情况。通过预计算和聚合操作,如对部分和客户进行分组...
一个 Cube 是一系列维度 (Dimension) 和度量 (Measure) 的集合区域。在 Cube 中, Dimension 和 Measure 的共同地方就是共用一个事实表。 Cube 中的有以下几个属性: 属性名 含义 name Cube 的名字 caption ...
14.3 使用ROLLUP、GROUPING和CUBE 14.4 家族树和COlLrlectby 14.4.1 排除个体和分支 14.4.2 向根遍历 14.4.3 基本规则 第15章 更改数据:插入、更新、合并和删除 第16章 DECODE和CASE.SQL中的if-fhen-else 第17章 ...
5. **RANK**: 为每个组内的行分配一个唯一的排名,如果有相同值,会跳过中间的排名。 6. **DENSE_RANK**: 类似于RANK,但当遇到相同值时,不会跳过排名。 7. **FIRST_VALUE** 和 **LAST_VALUE**: 分别返回组内数据...