在本教程中,将学习如何使用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()
函数从一组值中计算平均值。