CUBE和ROLLUP的一个简单介绍

本文为网络转摘:


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的一个简单介绍。

你可能感兴趣的:(SqlServer,SQL,SQL,Server,Oracle)