在本教程中,将学习如何使用SQL Server AVG()函数计算一组值的平均值。
SQL Server AVG()函数简介
SQL Server AVG()函数是一个返回分组的平均值的聚合函数。
以下是AVG()函数的语法:
AVG([ALL | DISTINCT] expression)
在这个语法中:
ALL指示AVG()函数采用所有值进行计算。默认情况下使用ALL。DISTINCT指示AVG()函数仅对唯一值进行操作。expression是一个返回数值的有效表达式。
注意:
AVG()函数忽略NULL值。
SQL Server AVG()函数:ALL与DISTINCT
以下语句创建一个新表,然后向表中插入一些值,并查询数据:
CREATE TABLE t(
val dec(10,2)
);
INSERT INTO t(val)
VALUES(1),(2),(3),(4),(4),(5),(5),(6);
SELECT
val
FROM
t;
以下语句使用AVG()函数计算t表中所有值的平均值:
SELECT
AVG(ALL val)
FROM
t;
执行上面查询语句,得到以下结果:
在此示例中,使用了ALL修饰符,因此,平均函数计算中val列中的所有(8个)值:
(1 + 2 + 3 + 4 + 4 + 5 + 5 + 6) / 8 = 3.75
以下语句将AVG()函数与DISTINCT修饰符一起使用:
SELECT
AVG(DISTINCT val)
FROM
t;
执行上面查询语句,得到以下结果:

在此示例中,使用了DISTINCT修饰符,因此,平均函数计算中val列中的唯一(6个)值:
(1 + 2 + 3 + 4 + 5 + 6) / 6 = 3.50
SQL Server AVG()函数示例
下面举一些例子来看看AVG()函数是如何工作的。
1. SQL Server AVG()简单示例
以下示例返回所有产品的平均价格:
SELECT
AVG(list_price)
FROM
production.products;
在此示例中,AVG()函数返回整个表的单个值。执行上面查询语句,得到以下结果:

2. SQL Server AVG()带有GROUP BY示例
如果将AVG()函数与GROUP BY子句一起使用,则AVG()函数将为每个分组返回单个值,而不是整个表的单个值。
以下示例返回每个产品类别的平均价格:
SELECT
category_name,
CAST(ROUND(AVG(list_price),2) AS DEC(10,2))
avg_product_price
FROM
production.products p
INNER JOIN production.categories c
ON c.category_id = p.category_id
GROUP BY
category_name
ORDER BY
category_name;
执行上面查询语句,得到以下结果:
3. SQL Server AVG()与HAVING子句示例
请参阅以下示例:
SELECT
brand_name,
CAST(ROUND(AVG(list_price),2) AS DEC(10,2))
avg_product_price
FROM
production.products p
INNER JOIN production.brands c ON c.brand_id = p.brand_id
GROUP BY
brand_name
HAVING
AVG(list_price) > 500
ORDER BY
avg_product_price;
执行上面查询语句,得到以下结果:

在这个例子中:
- 首先,
GROUP BY子句将按品牌分组。 - 其次,
AVG()函数计算每个组的平均价格。 - 第三,
HAVING子句删除平均价格低于500的品牌。
在本教程中,学习了如何使用SQL Server AVG()函数从一组值中计算平均值。
上一篇:
SQL Server聚合函数
下一篇:
SQL Server日期函数
