sql中的cube和rollup

本文详细解释了SQL中的CUBE和ROLLUP功能的区别。通过一个具体的例子展示了这两种方法如何生成不同的分组聚合结果,以及它们各自的特点和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

使用CUBE,首先要了解GROUP BY。

其实CUBE和ROLLUP区别不太大,只是在基于GROUP BY 子句创建和汇总分组的可能的组合上有一定差别,CUBE将返回的更多的可能组合。如果在GROUP BY子句中有N个列或者是有N个表达式的话,SQLSERVER在结果集上会返回2的N-1次幂个可能组合。

CUBE和ROLLUP之间的区别在于:     
    
CUBE 生成的结果集显示了所选列中值的所有组合的聚合。  

ROLLUP生成的结果集显示了所选列中值的某一层次结构的聚合
    
ROLLUP就是将GROUP BY后面的第一列名称求总和,而其他列并不要求
而CUBE则会将每一个列名称都求总和  

COPY了一个例子,首先用ROLLUP

查询语句:

Select cust_id,product_code,sum(qty) as quantity

From invoices Where cust_id IN (4,5)

Group Bycust_id, product_code

WITH RollupOrder By cust_id

查询结果:
cust_id         product_code         quantity
-------        --------------         -------
NULL            NULL                      10
4                 5                                 3
4                 6                                 3
4                 NULL                         6
5                 5                                 4
5                 NULL                         4
第一行是4,5买的所有产品的数量
第二行是4买5产品的数量
第三行是4买6产品的数量
第四行是4买所有产品的数量
第五行是5买5产品的数量
第六行是5买所有产品的数量

如果查询语句中的ROLLUP关键字更改为CUBE,就会多出有关产品的信息
查询结果:
cust_id         product_code         quantity
-------        --------------         -------
NULL            NULL                       10
NULL            5                               7
NULL            6                               3
4                    5                               3
4                    6                               3
4                    NULL                       6
5                    5                               4
5                    NULL                       4
第2行是所有顾客买5产品的数量
第3行是所有顾客买6产品的数量
  
ROLLUP操作的结果集具有类似 COMPUTE BY所返回结果集的功能;然而ROLLUP 具有下列优点:     
    
ROLLUP返回单个结果集;COMPUTE     BY返回多个结果集,而多个结果集会增加应用程序代码的复杂性。   
   
ROLLUP可以在服务器游标中使用;COMPUTE BY不可以。   
    
有时,查询优化器为ROLLUP生成的执行计划比为 COMPUTE BY 生成的更为高效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值