为什么 group by 子句中,一般不建议使用 CUBE、ROLLUP 子句呢?
--------------------------------------------
这两个子句都可以实现小计的合计行的功能,但是一些资料上却说,最好不用,我不知为什么,
一定有一些道理吧,请大家解惑。
--------------------------------------------
这两个子句都可以实现小计的合计行的功能,但是一些资料上却说,最好不用,我不知为什么,
一定有一些道理吧,请大家解惑。
解决方案 »
- 问一个sql检索,关于获取最大值
- SQL SERVER 中的"页"的概念有详细的资料吗?
- 帮忙翻译一下错误代码(谢谢!!!!)
- 求一SQL,如何getdate()转换成20080918 090512这样的字符,越简单越好
- sqlserver2005数据库延迟阻塞的问题?
- 一开机就有个mssearch.exe 进程在运行,占用了80%左右的cpu,这是个什么进程,为什么杀不掉,我的cpu 是P4 (1.8G)
- SQL SERVER 2K数据库还原问题!
- 不行!下面代码出错?
- 怎樣在SQL Server存儲過程中使用表作為存儲過程參數
- Oracle数据库的实时性
- 暑假实习要做个软件。可能要用数据库大家提提意见啊!
- 没有关联的更新语句(效率一定要高)
Rollup计算诸如sum count max min avg的函数,增加了聚合的级别.CUBE是一个类似ROLLUP的扩展,使得可以用一个语句计算所有可能的聚合。
CUBE可以通过单条生成Cross-tabulation(交叉报表)报告的信息。
CUBE,ROLLUP,GROUPING SETS扩展令你可以精确的对你感兴趣的group by 条款进行grouping。不运行cube操作也可以高效的从多个维度进行分析。
计算一个full cube将会带来很高的负载.
多维数据集
CUBE 运算符可用于生成 n 维的多维数据集,即具有任意数目维度的多维数据集。只有一个维度的多维数据集可用于生成合计,例如:
SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
ELSE ISNULL(Item, 'UNKNOWN')
END AS Item,
SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item WITH CUBE
GO
此 SELECT 语句返回的结果集既显示了 Item 中每个值的小计,也显示了 Item 中所有值的总计:
Item QtySum
-------------------- --------------------------
Chair 311.00
Table 347.00
ALL 658.00
包含带有许多维度的 CUBE 的 SELECT 语句可能生成很大的结果集,因为这些语句会为所有维度中值的所有组合生成行。这些大结果集包含的数据可能过多而不易于阅读和理解。rollip 我个人觉得挺好的。
主要还是看需求吧