日志文章

2008年05月10日 13:24:03

SQL中的cube和rollup

SQL中的cube和rollup
发表于:2008年5月10日 9时55分40秒阅读(1)评论(1)


SQL中的cube和rollup
要使用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 生成的更为高效。

Tags: SQL   cube   rollup  

类别: SQL |  评论(0) |  浏览(1271) |  收藏
发表评论
看不清楚,换一张