利用T-SQL集合函数操作分组数据

日期: 2010-05-30 作者:Robert Sheldon翻译:冯昀晖 来源:TechTarget中国 英文

在T-SQL语句中使用“GROUP BY”从句时,你可以使用“ROLLUP”,“CUBE”或者“GOURPING SETS”操作符来指定包含在结果集中的附加统计数据。这部分汇总数据在“GROUP BY”列表中表示为“null”值。   这是“null”值的一种特殊用法。然而,在“GROUP BY”列中指定的该列可以包含“null”值,(这种情况下)在该列的结果中也会显示为“null”。

要区分这两种类型的“null”值,可以使用SQL Server提供的“GROUPING”集合函数。该函数可以明确指定“GROUP BY”从句中指定的列是否参与集合计算。   如果结果集中的值参与集合运算了,则“G……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

在T-SQL语句中使用“GROUP BY”从句时,你可以使用“ROLLUP”,“CUBE”或者“GOURPING SETS”操作符来指定包含在结果集中的附加统计数据。这部分汇总数据在“GROUP BY”列表中表示为“null”值。

  这是“null”值的一种特殊用法。然而,在“GROUP BY”列中指定的该列可以包含“null”值,(这种情况下)在该列的结果中也会显示为“null”。要区分这两种类型的“null”值,可以使用SQL Server提供的“GROUPING”集合函数。该函数可以明确指定“GROUP BY”从句中指定的列是否参与集合计算。

  如果结果集中的值参与集合运算了,则“GROUPING”函数返回值“1”。否则,该函数返回值为“0”。我们来看一个例子,了解一下它的用法。在下面的“SELECT”语句中,我基于“Product”表的“Color”列对数据进行分组:

  SELECT
  Color,
  AVG(ListPrice) AS AvgPrice,
  COUNT(*) AS TotalAmount,
  GROUPING(Color) AS AggGroup
  FROM
  Production.Product
  GROUP BY
  Color WITH ROLLUP

  你可以看到,“GROUP BY”从句带有“WITH ROLLUP”操作符。因为“Color”是“GROUP BY”从句中指定的列,所以该列可以被用在“SELECT”列表的“GROUPING”函数中。

  注意:“GROUPING”函数只能被用在“SELECT”列表,“HAVING”从句或者“ORDER BY”从句中。

  “GROUPING”函数常常用来指明在“Color”列中显示的值是否是一个分组值,还是参与集合运算的累积值。下表显示了该“SELECT”语句的查询结果:

  正如你所预料的,“AggGroup”列对那些颜色color本身(黑色black,蓝色blue,灰色grey,等等)显示值为“0”。这表示颜色color值不参与分组计算;实际上,它仅仅是一组颜色。在“Color”列显示值“NULL”时,“GROUPING”的使用就变得很重要了。

  第一个“NULL”的情况,“AggGroup”列返回值为“0”,表示这个“NULL”不是一个集合计算值,而是那些没有对颜色信息赋值的分组数据。

  而“Color”列中的第二个“NULL”显示的“AggGroup”值为1,这表示这是“ROLLUP”集合计算的一部分,该组中的所有合计都参与了集合计算。因此,你知道平均价格和数量是为展现整个表总计的一个准备。换句话说,该行包含了所有颜色分组的累计值。

作者

Robert Sheldon
Robert Sheldon

自由技术撰稿人和技术咨询专家,曾出版和发布若干本书籍、文章和培训教材,重点关注Windows、数据库、商务智能等。

相关推荐