T-SQL集合函数基础知识

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

在操作SQL Server数据库中的数据时,有时你可能会需要对一组数值执行计算。例如,你的数据可能包括你所在组织的大量个体零售销售额。因此,你需要算出某一年度的总销量或者每个销售代表的平均销售额。   在SQL Server 2008中,Transact-SQL有一些集合函数,这些函数支持你执行这类计算。

一个T-SQL集合函数返回一个值,可以被作为一个表达式用在SELECT查询列表或者“COMPUTE”,“COMPUTE BY”或者“HAVING”从句中。所有集合函数都忽略“null”值,除了“COUNT”函数。   在本文中,我会展示如何使用SQL Server 2008中可用的集合函数。本……

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

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

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

在操作SQL Server数据库中的数据时,有时你可能会需要对一组数值执行计算。例如,你的数据可能包括你所在组织的大量个体零售销售额。因此,你需要算出某一年度的总销量或者每个销售代表的平均销售额。

  在SQL Server 2008中,Transact-SQL有一些集合函数,这些函数支持你执行这类计算。一个T-SQL集合函数返回一个值,可以被作为一个表达式用在SELECT查询列表或者“COMPUTE”,“COMPUTE BY”或者“HAVING”从句中。所有集合函数都忽略“null”值,除了“COUNT”函数。

  在本文中,我会展示如何使用SQL Server 2008中可用的集合函数。本文创建的示例都基于SQL Server 2008本地实例以及“AdventureWorks2008 ”示例数据库。这些示例是按照功能进行组织的,当然这种组织只是为了帮助说明和展示这些函数的一种方式。

  T-SQL集合函数基础知识

  我要讲解的第一组T-SQL函数是“AVG”函数和“SUM”函数。“AVG”函数返回一组数值的平均值,而“SUM”函数返回一组数值的总和。这两个函数都会对“null”值做忽略处理。

  下面的例子演示了这两个函数的用法,从“AdventureWorks2008 ”数据库的“SalesOrderHeader ”表中获取汇总的销售数据:

  SELECT
  TerritoryID,
  AVG(SubTotal) AS AvgSales,
  SUM(SubTotal) AS TotalSales
  FROM
  Sales.SalesOrderHeader
  GROUP BY
  TerritoryID
  ORDER BY
  TerritoryID

  在本例中,我按“Territory ID”列对值进行分组,然后对产生的每个分组求一次平均值以及计算基于“SubTotal ”列求出来的销售总量。

  正如你所看到的,要使用T-SQL集合函数,我必须指定函数名,后面跟着我要针对该列做合计的列名(在圆括号内)。要注意该列实际上可以是满足该函数要求的任意表达式。关于在函数中可以使用什么表达式的详细说明,请参见SQL Server联机丛书相应的主题。

  这就是“AVG”和“SUM”集合函数的全部用法。执行上面的语句会返回如下表所示的结果:

  如上面的结果所示,该语句返回了“SalesOrderHeader ”表中每个“Territory ID”的平均值和总销售额。

  现在,让我们看看另外两个集合函数:“MAX”函数和“MIN”函数。“MAX”函数返回一组值中的最大值,而“MIN”函数返回最小值。这两个函数都会忽略“null”值。在下面的语句中,我修改了前面的例子,使用了“MAX”函数和“MIN”函数:

  SELECT
  TerritoryID,
  AVG (SubTotal) AS AvgSales,
  SUM(SubTotal) AS TotalSales,
  MAX(SubTotal) AS MaxSale,
  MIN(SubTotal) AS MinSale
  FROM
  Sales.SalesOrderHeader
  GROUP BY
  TerritoryID
  ORDER BY
  TerritoryID

  要注意,我仍然必须指定函数名,然后在后面的括号里写上列名。现在,该语句执行结果展示了每个“Territory ID”的最大和最小销售额,如下表所示:

  “MAX”函数和“MIN”函数与“AVG”函数和“SUM”函数还存在一种差异,就是你还可以对字符和日期数据使用“MAX”函数和“MIN”函数。当处理字符数据时,最大值和最小值是基于列的自然顺序计算的。例如,在下面的例子中,我会查询到“Product”表中产品列表的第一个名称和最后一个名称:

  SELECT
  MIN(Name) AS FirstProduct,
  MAX(Name) AS LastProduct
  FROM
  Production.Product

  “name”列被指定为“nvarchar”数据类型。当我对该列使用“MAX”函数或者“MIN”函数时,返回的最大值和最小值是基于该列名称的字母顺序计算的。因此,该语句返回该列表中的第一个产品名称和最后一个产品名称,如下表所示:

  如果我对日期时间列使用“MIN”函数或者“MAX”函数,返回的值会基于保存在该列中日期时间值的最早值或者最晚值进行计算。

作者

Robert Sheldon
Robert Sheldon

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

相关推荐

  • SQL Server 2008将退出微软主流数据库支持

    你的企业是否还在运行SQL Server 2008?请注意微软为SQL Server 2008提供的主流技术支持服务将于今年的7月8日正式结束。

  • Oracle DML语句回滚开销估算

    数据库事务由1个或多个DML SQL组成,我们知道Oracle数据库在进行DML操作需要使用UNDO表空间来保存事务回滚的信息,对于每种DML操作回滚的UNDO信息都不一样。

  • Exadata混合列压缩功能与INSERT语句

    Oracle Exadata数据库云服务器的混合列压缩功能在处理插入数据时是如何工作的?专家Rick Greenwald给出了解答。

  • 利用ALinq 连接MySQL数据库

    Alinq完美地解决了多类型数据库操作的问题,在操作SQL Server 数据上毫不逊色Linq to SQL,在Mysql、Oracle、Db2等数据库操作上更甚一筹。