Sql Server数据汇总 – with rollup, with cube, grouping

Technorati Tags: with rollup, with cube, grouping

没心情详细说,简单地做个笔记。

 

当需要对数据库数据进行分类统计的时候,往往会用上group by进行分组。而在group by后面还可以加入with rollup和with cube等关键字对数据进行汇总。

假设学生表(Student),有班级(Clazz)、性别(Sex)、年龄(Age)字段。

如:

select Sex, Clazz, Sum(Age)
from Student
group by Sex, Clazz with rollup

又如:

select Sex, Clazz, Sum(Age)
from Student
group by Sex, Clazz with cube

 

至于这两个查询出来的结果就不贴图片/表格了。

上面的查询会出线两种与汇总有关的记录,一种是对Sex的汇总,另一种则是对所有记录的汇总。

而下面的查询则会多出几条,除了对Sex汇总和对所有记录的汇总,还有对Clazz的汇总。

with rollup和with cube的区别在于:

with rollup生成的汇总数据集显示了所选列中值的某一层次结构的聚合

with cube生成的汇总数据集显示了所选列中值的所有组合的聚合

 

自动生成的汇总数据集中会有很多的NULL,通过grouping()函数可以处理这些NULL。

grouping(<字段名>)只会返回两个值,0或者1。如果单元格中的内容是由汇总生成的NULL,grouping()函数返回1,否则返回0。值得注意的是,并不是单元格中的值为NULL就返回1,就算单元格里边通过查询出来的的值是NULL,但它不是由grouping()函数生成的NULL,grouping()函数仍是返回0

那么,通过grouping()函数,就可以使用诸如以下的查询语句来设置这些NULL的显示值。下面例子将性别汇总生成的NULL显示为性别汇总。

select case when grouping(Sex) = 1 then '性别汇总' else Sex as '性别'
from Student
group by Sex, Clszz with rollup

还可以通过where字句来过滤生成的汇总数据集。下面例子把全部的汇总给过滤掉了,只显示对性别的汇总。

select case when grouping(Sex) = 1 then '性别汇总' else Sex as '性别'
from Student
group by Sex, Clazz with rollup
having grouping(Sex) = 0

转载于:https://www.cnblogs.com/z119977662/archive/2010/09/21/1832659.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值