在 SELECT 查询中使用分组集

  GROUP BY 子句可以包括 GROUPING SETS、CUBE、ROLLUP、WITH CUBE 或 WITH ROLLUP等从属子句,从而为 SELECT 子句 <select> 列表中的聚合函数提供有关每个组(而不是各行)的信息。

  更多详细信息,请参考 http://technet.microsoft.com/zh-cn/library/ms177673.aspx

  WITH CUBE 或 WITH ROLLUP 等从属子句不符合 ISO 规范,因此后续版本 SQL Server 将删除该功能。请避免在新的开发工作中使用该功能。


一、ROLLUP 从属子句

1. 语法

  ROLLUP 从属子句生成简单的 GROUP BY 聚合行以及小计行或超聚合行,还生成一个总计行。

  返回的分组数等于<composite element list>中的表达式数加一。


2. 示例

  下面的语句会为 (a, b, c)、(a, b) 和 (a) 值的每个唯一组合生成一个带有小计的行。 还将计算一个总计行。

  列是按照从右到左的顺序汇总的。 列的顺序会影响 ROLLUP 的输出分组,而且可能会影响结果集内的行数。

SELECT a, b, c, SUM ( <expression> )

FROM T

GROUP BY ROLLUP (a,b,c);



二、CUBE 从属子句

1. 语法

  生成简单的 GROUP BY 聚合行、ROLLUP 超聚合行和交叉表格行。

  CUBE 针对 <composite element list> 中表达式的所有排列输出一个分组。

  生成的分组数等于 (2n),其中 n = <composite element list> 中的表达式数。


2. 示例

  下面的语句会为 (a, b, c)、(a, b)、(a, c)、(b, c)、(a)、(b) 和 (c) 值的每个唯一组合生成一个带有小计的行,还会生成一个总计行。

  列的顺序不影响 CUBE 的输出。

SELECT a, b, c, SUM (<expression>)

FROM T

GROUP BY CUBE (a,b,c);



三、GROUPING SETS 从属子句

1. 语法

  在一个查询中指定数据的多个分组。 仅聚合指定组,而不聚合由 CUBE 或 ROLLUP 生成的整组聚合。 其结果与针对指定的组执行 UNION ALL 运算等效。

  GROUPING SETS 可以包含单个元素或元素列表。GROUPING SETS 可以指定与 ROLLUP 或 CUBE 返回的内容等效的分组。<grouping set item list> 可以包含 ROLLUP 或 CUBE。


2. 示例

  下面的语句会为 (a,b) 和 (c) 值的每个分组集生成一个带有小计的行。还将计算一个总计行。

SELECT a, b, SUM (<expression>)

FROM T

GROUP BY GROUPING SETS

(

  (a,b)

  (c)

  ()

);

  上例相当于:

SELECT a, b, SUM (<expression>)

FROM T

GROUP BY a,b


UNION ALL

SELECT NULL, NULL, SUM (<expression>)

FROM T

GROUP BY c


UNION ALL

SELECT NULL, NULL, SUM (<expression>)

FROM T


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值