当我们选不只一个栏位,且其中至少一个栏位有包含函数的运用时,我们就要用到group by这个指令。在这个情况下。
我们需要确定我们有group by所有其他的栏位。换句话说。除了包括函数的栏位外。我们都要将其放在group by子名。
msdn中这样解释:
指定用来放置输出行的组。如果 SELECT 子句 <select list> 中包含聚合函数,则 GROUP BY 将计算每组的汇总值。指定 GROUP BY 时,选择列表中任意非聚合表达式内的所有列都应包含在 GROUP BY 列表中,或者 GROUP BY 表达式必须与选择列表表达式完全匹配。
使用 ROLLUP 汇总数据
在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集。
使用 ROLLUP 汇总数据
在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集。有关详细信息,请参阅使用 CUBE 汇总数据。
下面是 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 不仅报告 Color 值与 Item 值 Chair(Red、Blue 和 Red + Blue)的所有可能组合,还报告 Item 值与 Color 值 Red(Chair、Table 和 Chair + Table)的所有可能组合。
对于 GROUP BY 子句的右列中的每个值,ROLLUP 操作并不报告左列中各值的所有可能组合。例如,ROLLUP 并不报告每个 Color 值的 Item 值的所有可能组合。
ROLLUP 操作的结果集与 COMPUTE BY 返回的结果集具有类似的功能。然而,ROLLUP 具有下列优点:
ROLLUP 返回单个结果集,而 COMPUTE BY 返回多个结果集,而多个结果集会增加应用程序代码的复杂性。
ROLLUP 可以在服务器游标中使用,而 COMPUTE BY 则不可以。
有时,查询优化器为 ROLLUP 生成的执行计划比为 COMPUTE BY 生成的更为高效。
分享到:
相关推荐
一、如何理解group by 后 带 rollup 子句所产生的效果 group by 后 带 rollup 子句的功能可以理解为:先按一定的规则产生多种分组,然后按各种分组统计数据(至于统计出的数据是求和还是最大值还是平均值等这就取决...
group by后使用rollup子句总结,oracle开发人员值得一看
使用ROLLUP函数生成报表的小计、合计 这个函数很不错 使用的范围其实蛮广的
GROUP BY子句(rollup,cube,grouping sets)实例说明
GROUP BY子句要和聚合函数配合使用才能完成分组查询,在SELECT查询的字段中,如果没有使用聚合函数就必须出现在ORDER BY子句中。分组查询后,查询结果为一个或多个列分组后的结果集。 GROUP BY语法 SELECT 列名, ...
SQL语句中Group BY 和Rollup以及cube用法
SQL Server中的用法为group by colomn with [rollup|cube],首先要弄明白rollup 和cube,就要知道group by的用法,group by 为对列进行分组,只展现分组统计的值,而 rollup 为分层次展现,cube 为展现列中所有层次...
sql学习 rollup之 group by 的完美增强.sql
group by扩展包括 rollup、cube、grouping、grouping sets的用法和说明
实际项目中因表数据量大,发现查询速度很慢。记录此次排查和优化过程。希望对阅读到此文章的朋友有所帮助。
用union all方式对上面代码改写如下:SQL> select group_id,job,sum(salary) from group_test 2 g
关于with cube ,with rollup 和 grouping 通过查看sql 2005的帮助文档找到了CUBE 和 ROLLUP 之间的具体区别: ...仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相关联的选择列表中才允许分组。 当看到以上
oracle 聚合函数的扩展使用 ...2.CUBE子句也是对GROUP BY子句进行扩展,返回CUBE中所有列组合的小计信息,同时在最后显示总计信息。 3.GROUPING()函数与ROLLUP、CUBE的结合使用 4.GROUPING_ID()函数的使用
本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种 环境准备 create table dept as select * from scott.dept; create table emp as select * from ...
深入介结分析函数的内部实现cube,rollup,grouping,里面有具体的例子来说明,方便大家理解学习
详细介绍了cube、rollup、grouping sets的原理及用法
利用Closure Compiler通过Rollup缩小和优化JavaScript
前端开源库-rollup-loaderRollup加载器,Rollup尽其所能,让Webpack完成任务。
前端开源库-rollup-helper汇总助手,
rollup在oracle ,sql-server里面都有有。