在GROUP BY子句中的CUBE与ROLLUP是否完全一样?

 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   生成的更为高效。

 

 

 

 

CUBE   运算符生成的结果集是多维数据集。多维数据集是事实数据的扩展,事实数据即记录个别事件的数据。扩展建立在用户打算分析的列上。这些列被称为维。多维数据集是一个结果集,其中包含了各维度的所有可能组合的交叉表格。  
   
  CUBE   运算符在   SELECT   语句的   GROUP   BY   子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。GROUP   BY   应指定维度列和关键字   WITH   CUBE。结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值  
  --------------  
  用   ROLLUP   汇总数据  
  在生成包含小计和合计的报表时,ROLLUP   运算符很有用。ROLLUP   运算符生成的结果集类似于   CUBE   运算符所生成的结果集。有关更多信息,请参见用   CUBE   汇总数据。    
   
  CUBE   和   ROLLUP   之间的区别在于:    
   
  CUBE   生成的结果集显示了所选列中值的所有组合的聚合。  
   
   
  ROLLUP   生成的结果集显示了所选列中值的某一层次结构的聚合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值