本文件已封存並已停止維護。
AVG (Transact-SQL)
SQL Server 2005
傳回群組中各個值的平均值。會忽略 Null 值。後面可能接著 OVER 子句。
- ALL
-
將彙總函數套用至所有值。ALL 是預設值。
- DISTINCT
-
指定只在值的每個唯一執行個體上執行 AVG,不論值出現多少次,都是如此。
- expression
-
這是精確數值或近似數值資料類型類別目錄的運算式,但 bit 資料類型除外。不允許彙總函數和子查詢。
傳回類型取決於 expression 評估結果的類型。
| 運算式結果 | 傳回類型 |
|---|---|
|
整數類別目錄 |
int |
|
decimal 類別目錄 (p, s) |
decimal(38, s) 除以 decimal(10, 0) |
|
money 和 smallmoney 類別目錄 |
money |
|
float 和 real 類別目錄 |
float |
重要事項: |
|---|
| 當您使用 CUBE 或 ROLLUP 時,不支援個別彙總,如 AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、MAX(DISTINCT column_name)、MIN(DISTINCT column_name) 和 SUM(DISTINCT column_name)。如果使用它們的話,SQL Server 2005 Database Engine 會傳回錯誤訊息,並取消查詢。 |
A. 利用 SUM 和 AVG 函數計算
下列範例會計算 Adventure Works Cycles 的副總裁所用的平均假期時數及病假時數總和。每個這些彙總函數都會產生所有擷取的資料列之單一摘要值。
USE AdventureWorks;
GO
SELECT AVG(VacationHours)as 'Average vacation hours',
SUM (SickLeaveHours) as 'Total sick leave hours'
FROM HumanResources.Employee
WHERE Title LIKE 'Vice President%';
以下為結果集:
Average vacation hours Total sick leave hours ---------------------- ---------------------- 25 97 (1 row(s) affected)
B. 搭配 GROUP BY 子句使用 SUM 和 AVG 函數
當搭配 GROUP BY 子句使用時,每個彙總函數都會產生每個群組的單一值,而不是整份資料表的單一值。下列範例會產生每個銷售領域的摘要值。摘要會列出每個領域的銷售人員所收到的平均獎金,及每個領域年初至今的銷售總和。
USE AdventureWorks; GO SELECT TerritoryID, AVG(Bonus)as 'Average bonus', SUM(SalesYTD) 'YTD sales' FROM Sales.SalesPerson GROUP BY TerritoryID; GO
C. 搭配 DISTINCT 使用 AVG
下列陳述式會傳回產品的平均標價。
USE AdventureWorks; GO SELECT AVG(DISTINCT ListPrice) FROM Production.Product;
以下為結果集:
------------------------------ 437.4042 (1 row(s) affected)
D. 使用不含 DISTINCT 的 AVG
當沒有 DISTINCT 時,AVG 函數會尋找 Product 資料表中所有產品的平均標價。
USE AdventureWorks; GO SELECT AVG(ListPrice) FROM Production.Product;
以下為結果集:
------------------------------ 438.6662 (1 row(s) affected)
顯示:

