AVG (Transact-SQL)
傳回群組中各個值的平均值。會忽略 Null 值。後面可能接著 OVER 子句。
語法
AVG ( [ ALL | DISTINCT ] expression )
引數
- 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 會傳回錯誤訊息,並取消查詢。 |
備註
如果 expression 的資料類型是一個別名資料類型,傳回類型也是別名資料類型。不過,如果別名資料類型的基底資料類型升級,例如,從 tinyint 升級到 int,傳回值就是升級的資料類型,而不是別名資料類型。
範例
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)
請參閱
參考
彙總函數 (Transact-SQL)
OVER 子句 (Transact-SQL)