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日期函數