在本教學中,將學習如何使用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日期函數