天天看點

sql server 2005 T-SQL AVG (Transact-SQL)

傳回組中各值的平均值。将忽略空值。後面可以跟 OVER 子句。

sql server 2005 T-SQL AVG (Transact-SQL)

Transact-SQL 文法約定

 文法

AVG ( [ ALL | DISTINCT ] expression )       

 參數

ALL
對所有的值進行聚合函數運算。ALL 是預設值。
DISTINCT
指定 AVG 隻在每個值的唯一執行個體上執行,而不管該值出現了多少次。
expression
是精确數值或近似數值資料類别(bit 資料類型除外)的表達式。不允許使用聚合函數和子查詢。

 傳回類型

傳回類型由 expression 的計算結果類型确定。

表達式結果 傳回類型
integer 類别 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 資料庫引擎将傳回錯誤消息并取消查詢。

 備注

如果 expression 是别名資料類型,則傳回類型也具有别名資料類型。但是,如果别名資料類型的基本資料類型得到提升(例如,從 tinyint 提升到 int),則傳回值具有提升的資料類型,而非别名資料類型。

 示例

A. 使用 SUM 和 AVG 函數進行計算

以下示例計算 Adventure Works Cycles 的副總所用的平均休假小時數以及總的病假小時數。對檢索到的所有行,每個聚合函數都生成一個單獨的彙總值。

sql server 2005 T-SQL AVG (Transact-SQL)

複制代碼

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%';      

下面是結果集:

sql server 2005 T-SQL AVG (Transact-SQL)

複制代碼

Average vacation hours       Total sick leave hours 
----------------------       ---------------------- 
25                           97

(1 row(s) affected)      

B. 帶 GROUP BY 子句使用 SUM 和 AVG 函數

當與 GROUP BY 子句一起使用時,每個聚合函數都針對每一組生成一個值,而不是針對整個表生成一個值。以下示例針對每個銷售地區生成彙總值。彙總中列出每個地區的銷售人員得到的平均獎金以及每個地區的本年度銷售總額。

sql server 2005 T-SQL AVG (Transact-SQL)

複制代碼

USE AdventureWorks;
GO
SELECT TerritoryID, AVG(Bonus)as 'Average bonus', SUM(SalesYTD) 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO      

C. 帶 DISTINCT 使用 AVG

以下語句傳回産品的平均标價。

sql server 2005 T-SQL AVG (Transact-SQL)

複制代碼

USE AdventureWorks;
GO
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;      

下面是結果集:

sql server 2005 T-SQL AVG (Transact-SQL)

複制代碼

D. 不帶 DISTINCT 使用 AVG

如果不使用 DISTINCT,AVG 函數将計算出 Product 表中所有産品的平均标價。

sql server 2005 T-SQL AVG (Transact-SQL)

複制代碼

USE AdventureWorks;
GO
SELECT AVG(ListPrice)
FROM Production.Product;      

下面是結果集:

sql server 2005 T-SQL AVG (Transact-SQL)

複制代碼

------------------------------
438.6662
(1 row(s) affected)