SQL Server Avg()函数

在本教程中,将学习如何使用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日期函数