Transact-SQL 参考

AVG

返回组中值的平均值。空值将被忽略。

语法

AVG ( [ ALL | DISTINCT ] expression )

参数

ALL

对所有的值进行聚合函数运算。ALL 是默认设置。

DISTINCT

指定 AVG 操作只使用每个值的唯一实例,而不管该值出现了多少次。

expression

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

返回类型

返回类型由表达式的运算结果类型决定。

表达式结果 返回类型
整数分类 int
decimal 分类 (p, s) decimal(38, s) 除以 decimal(10, 0)
money smallmoney 分类 money
floatreal 分类 float

重要  当使用 CUBE 或 ROLLUP 时,不支持非重复聚合,例如 AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、MAX(DISTINCT column_name)、MIN(DISTINCT column_name) 和 SUM(DISTINCT column_name)。如果使用了 CUBE 或 ROLLUP,Microsoft® SQL Server™ 将返回错误信息并取消查询。

示例
A. 使用 SUM 和 AVG 函数进行计算

下例计算所有商业类书籍的平均预付款和本年度迄今为止的销售额。对检索到的所有行,每个聚合函数都生成一个单独的汇总值。

USE pubs

SELECT AVG(advance), SUM(ytd_sales)
FROM titles
WHERE type = 'business'

下面是结果集:

-------------------------- ----------- 
6,281.25                   30788       

(1 row(s) affected)
B. 与 GROUP BY 子句一起使用 SUM 和 AVG 函数

当与 GROUP BY 子句一起使用时,每个聚合函数都为每一组生成一个值,而不是对整个表生成一个值。下例对每一类书生成汇总值,这些值包括每一类书的平均预付款以及每一类书本年度迄今为止的销售总额。

USE pubs

SELECT type, AVG(advance), SUM(ytd_sales)
FROM titles
GROUP BY type
ORDER BY type

下面是结果集:

type                                                
------------ -------------------------- ----------- 
business     6,281.25                   30788       
mod_cook     7,500.00                   24278       
popular_comp 7,500.00                   12875       
psychology   4,255.00                   9939        
trad_cook    6,333.33                   19566       
UNDECIDED    NULL                       NULL      

(6 row(s) affected)
C. 使用带 DISTINCT 的 AVG

下列语句返回商业类书籍的平均价格。

USE pubs

SELECT AVG(DISTINCT price)
FROM titles
WHERE type = 'business'

下面是结果集:

-------------------------- 
11.64                      

(1 row(s) affected)
D. 使用不带 DISTINCT 的 AVG

如果不使用 DISTINCT,AVG 函数将计算出 titles 表中所有商业类书籍的平均价格。

USE pubs

SELECT AVG(price)
FROM titles
WHERE type = 'business'

下面是结果集:

-------------------------- 
13.73                      

(1 row(s) affected)

请参见

聚合函数