AVG (Transact-SQL)
グループ内の値の平均を返します。NULL 値は無視されます。後に OVER 句が続く場合があります。
構文
AVG ( [ ALL | DISTINCT ] expression )
引数
ALL
すべての値に集計関数が適用されます。ALL が既定値です。DISTINCT
値の出現回数にかかわらず、各値の一意なインスタンスだけに AVG を適用することを指定します。expression
真数型または概数型の式です。ただし、bit 型は除きます。集計関数とサブクエリは使用できません。
戻り値の型
戻り値の型は、expression の評価結果のデータ型によって決まります。
式の結果 |
戻り値の型 |
---|---|
tinyint |
int |
smallint |
int |
int |
int |
bigint |
bigint |
decimal 型 (p, s) |
decimal(38, s) / decimal(10, 0) |
money 型と smallmoney 型 |
money |
float 型と real 型 |
float |
説明
expression のデータ型が別名データ型の場合、戻り値の型も別名データ型になります。ただし、tinyint から int への変換など、別名データ型の基本データ型が昇格する場合、戻り値は別名データ型ではなく昇格したデータ型になります。
AVG () は、値セットの合計を NULL 以外の値の数で除算することによって、これらの値の平均を計算します。合計が戻り値のデータ型の最大値を超える場合は、エラーが返されます。
例
A. SUM 関数と AVG 関数を使用して計算する
次の例では、Adventure Works Cycles の副社長が利用した休暇時間の平均および病気休暇時間の合計が計算されます。これらの集計関数は、それぞれ取得されたすべての行の値の集計値を 1 つ返します。
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 句と共に使用した場合、テーブル全体ではなく、グループごとに 1 つの値が返されます。次の例では、販売区域ごとの集約値が生成されます。このサマリーでは、各区域の販売員が受け取ったボーナスの平均額と、各区域ごとの今年度の売上累計額が一覧表示されます。
USE AdventureWorks;
GO
SELECT TerritoryID, AVG(Bonus)AS 'Average bonus', SUM(SalesYTD) AS '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)