您的位置:首页 > 数据库

T-SQL中常用函数(1)—聚合函数

2010-02-21 18:25 375 查看
AVG:返回平均值,后面可能跟随OVER子句。

语法:AVG([ALL|DISTINCT]expression);all对所有的值进行聚合函数运算。ALL是默认值。DISTINCT

指定AVG只在每个值的唯一实例上执行,而不管该值出现了多少次。expression

是精确数值或近似数值数据类别(bit数据类型除外)的表达式。不允许使用聚合函数和子查询。

示例:

计算AdventureWorksCycles的副总所用的平均休假小时数以及总的病假小时数。对检索到的所有行,每个聚合函数都生成一个单独的汇总值。

USEAdventureWorks; GO SELECTAVG(VacationHours)as'Averagevacationhours', SUM(SickLeaveHours)as'Totalsickleavehours' FROMHumanResources.Employee WHERETitleLIKE'VicePresident%';
当与
GROUPBY
子句一起使用时,每个聚合函数都针对每一组生成一个值,而不是针对整个表生成一个值。以下示例针对每个销售地区生成汇总值。汇总中列出每个地区的销售人员得到的平均奖金以及每个地区的本年度销售总额。

USEAdventureWorks; GO SELECTTerritoryID,AVG(Bonus)as'Averagebonus',SUM(SalesYTD)'YTDsales' FROMSales.SalesPerson GROUPBYTerritoryID; GO


CHECKSUM:返回按照表的某一行或一组表达式计算出来的校验和值

语法:CHECKSUM(*|expression[,...n])*指定对表的所有列进行计算。如果有任一列是非可比数据类型,则CHECKSUM返回错误。非可比数据类型有text、ntext、image、XML和cursor,还包括以上述任一类型作为基类型的sql_variant。expression除非可比数据类型之外的任何类型的表达式。

CHECKSUM对其参数列表计算一个称为校验和的哈希值。此哈希值用于生成哈希索引。如果CHECKSUM的参数为列,并且对计算的CHECKSUM值生成索引,则结果是一个哈希索引。它可用于对列进行等价搜索。CHECKSUM满足哈希函数的下列属性:在使用等于(=)运算符比较时,如果两个列表的相应元素具有相同类型且相等,则在任何两个表达式列表上应用的CHECKSUM将返回同一值。对于该定义,指定类型的Null值被作为相等进行比较。如果表达式列表中的某个值发生更改,则列表的校验和通常也会更改。但只在极少数情况下,校验和会保持不变。因此,我们不推荐使用CHECKSUM来检测值是否更改,除非应用程序可以容忍偶尔丢失更改。请考虑改用HashBytes。指定MD5哈希算法时,HashBytes为两个不同输入返回相同结果的可能性比CHECKSUM小得多。

示例:使用
CHECKSUM
生成哈希索引。通过将计算校验和列添加到索引的表中,然后对校验和列生成索引来生成哈希索引。

--Createachecksumindex.
SETARITHABORTON;
USEAdventureWorks;
GO
ALTERTABLEProduction.Product
ADDcs_PnameASCHECKSUM(Name);
GO
CREATEINDEXPname_indexONProduction.Product(cs_Pname);
GO
校验和索引可用作哈希索引,尤其是当要索引的列为较长的字符列时可以提高索引速度。校验和索引可用于等价搜索。

/*UsetheindexinaSELECTquery.Addasecondsearch
conditiontocatchstraycaseswherechecksumsmatch,
butthevaluesarenotthesame.*/
SELECT*
FROMProduction.Product
WHERECHECKSUM(N'BearingBall')=cs_Pname
ANDName=N'BearingBall';
GO
对计算列创建索引将具体化为校验和列,对
ProductName
值所做的任何更改都将传播到校验和列。也可以直接对索引的列生成索引。然而,如果键值较长,则很可能不执行校验和索引甚至常规索引。

CHECKSUM_AGG:返回组中各值的校验和。空值将被忽略

语法与CHECKSUM一致。

CHECKSUM_AGG可用于检测表中的更改。表中行的顺序不影响CHECKSUM_AGG的结果。此外,CHECKSUM_AGG函数还可与DISTINCT关键字和GROUPBY子句一起使用。如果表达式列表中的某个值发生更改,则列表的校验和通常也会更改。但只在极少数情况下,校验值会保持不变。

示例:使用
CHECKSUM_AGG
检测
AdventureWorks
数据库中
ProductInventory
表的
Quantity
列中的更改。

--Getthechecksumvaluebeforethecolumnvalueischanged.
USEAdventureWorks;
GO
SELECTCHECKSUM_AGG(CAST(QuantityASint))
FROMProduction.ProductInventory;
GOUPDATEProduction.ProductInventory
SETQuantity=125
WHEREQuantity=100;
GO
--Getthechecksumofthemodifiedcolumn.
SELECTCHECKSUM_AGG(CAST(QuantityASint))
FROMProduction.ProductInventory;

COUNT:返回组中的项数

语法:COUNT({[[ALL|DISTINCT]expression]|*})ALL对所有的值进行聚合函数运算。ALL是默认值。DISTINCT

指定COUNT返回唯一非空值的数量。expressiontextimagentext以外任何类型的表达式。不允许使用聚合函数和子查询。

指定应该计算所有行以返回表中行的总数。COUNT(*)不需要任何参数,而且不能与DISTINCT一起使用。COUNT(*)不需要expression参数,因为根据定义,该函数不使用有关任何特定列的信息。COUNT(*)返回指定表中行数而不删除副本。它对各行分别计数。包括包含空值的行。

示例:列出了在AdventureWorksCycles工作的雇员可以拥有的不同标题的数量。

USEAdventureWorks;
GO
SELECTCOUNT(DISTINCTTitle)
FROMHumanResources.Employee;
GO计算AdventureWorksCycles的雇员总数。USEAdventureWorks;
GO
SELECTCOUNT(*)
FROMHumanResources.Employee;
GOUSEAdventureWorks;
GO
SELECTCOUNT(*),AVG(Bonus)
FROMSales.SalesPerson
WHERESalesQuota>25000;
GO


COUNT_BIG:返回组中的项数。用户与Count函数类是。Count_big返回bigint数据类型值。Count返回int数据类型值。

返回组中的项数。COUNT与COUNT_BIG函数类似。两个函数唯一的差别是它们的返回值。COUNT始终返回int数据类型值。COUNT_BIG始终返回bigint数据类型值。后面可以跟OVER子句。

MAX:返回表达式的最大值

语法:MAX([ALL|DISTINCT]expression)

示例:返回最高(最大)税率

USEAdventureWorks;
GO
SELECTMAX(TaxRate)
FROMSales.SalesTaxRate;
GO

MIN:返回表达式的最小值

SUM:返回表达式中所有值的和或仅非重复值的和。Sum只能用于数字列。空值将为忽略。

语法:SUM([ALL|DISTINCT]expression)

示例:显示了聚合函数与行聚合函数之间的区别。第一个示例显示了只提供汇总数据的聚合函数,第二个示例显示了提供详尽数据和汇总数据的行聚合函数。

USEAdventureWorks;'>USEAdventureWorks;
GO
SELECTColor,ListPrice,StandardCost
FROMProduction.Product
WHEREColorISNOTNULL
ANDListPrice!=0.00
ANDNameLIKE'Mountain%'
ORDERBYColor
COMPUTESUM(ListPrice),SUM(StandardCost)BYColor;
GO
针对
Product
表中列出的每种颜色计算
ListPrice
StandardCost
的和。[/code]
USEAdventureWorks;
GO
SELECTColor,SUM(ListPrice),SUM(StandardCost)
FROMProduction.Product
GROUPBYColor
ORDERBYColor;
GO

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: