返回组中各值的平均值。将忽略空值。后面可以跟 OVER 子句。
参数
-
ALL
-
对所有的值进行聚合函数运算。ALL 是默认值。
-
DISTINCT
-
指定 AVG 只在每个值的唯一实例上执行,而不管该值出现了多少次。
-
expression
-
是精确数值或近似数值数据类别(bit 数据类型除外)的表达式。不允许使用聚合函数和子查询。
返回类型
返回类型由 expression 的计算结果类型确定。
表达式结果 | 返回类型 |
---|---|
integer 类别 | int |
decimal 类别 (p, s) | decimal(38, s) 除以 decimal(10, 0) |
money 和 smallmoney 类别 | money |
float 和 real 类别 | float |
重要提示: |
---|
使用 CUBE 或 ROLLUP 时,不支持区分聚合,如 AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、MAX(DISTINCT column_name)、MIN(DISTINCT column_name) 和 SUM(DISTINCT column_name)。如果使用这类聚合,则 SQL Server 2005 数据库引擎将返回错误消息并取消查询。 |
备注
示例
A. 使用 SUM 和 AVG 函数进行计算
以下示例计算 Adventure Works Cycles 的副总所用的平均休假小时数以及总的病假小时数。对检索到的所有行,每个聚合函数都生成一个单独的汇总值。
USE AdventureWorks;
GO
SELECT AVG(VacationHours)as 'Average vacation hours',
SUM (SickLeaveHours) as 'Total sick leave hours'
FROM HumanResources.Employee
WHERE Title LIKE 'Vice President%';
下面是结果集:
Average vacation hours Total sick leave hours
---------------------- ----------------------
25 97
(1 row(s) affected)
B. 带 GROUP BY 子句使用 SUM 和 AVG 函数
当与 GROUP BY 子句一起使用时,每个聚合函数都针对每一组生成一个值,而不是针对整个表生成一个值。以下示例针对每个销售地区生成汇总值。汇总中列出每个地区的销售人员得到的平均奖金以及每个地区的本年度销售总额。
USE AdventureWorks;
GO
SELECT TerritoryID, AVG(Bonus)as 'Average bonus', SUM(SalesYTD) 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO
C. 带 DISTINCT 使用 AVG
以下语句返回产品的平均标价。
USE AdventureWorks;
GO
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;
下面是结果集:
------------------------------
437.4042
(1 row(s) affected)