AVG (Transact-SQL)

グループ内の値の平均を返します。NULL 値は無視されます。後に OVER 句が続く場合があります。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

AVG ( [ ALL | DISTINCT ] expression ) 

引数

  • ALL
    すべての値に集計関数が適用されます。ALL が既定値です。
  • DISTINCT
    値の出現回数にかかわらず、各値の一意なインスタンスだけに AVG を適用することを指定します。
  • expression
    真数型または概数型のです。ただし、bit 型は除きます。集計関数とサブクエリは使用できません。

戻り値の型

戻り値の型は、expression の評価結果のデータ型によって決まります。

式の結果 戻り値の型

int 型

int

decimal 型 (p, s)

decimal(38, s) / decimal(10, 0)

money 型と smallmoney

money

float 型と real

float

ms177677.note(ja-jp,SQL.90).gif重要 :
AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、MAX(DISTINCT column_name)、MIN(DISTINCT column_name)、および SUM(DISTINCT column_name) などの非重複集計関数は、CUBE または ROLLUP を使用している場合はサポートされません。これらの関数が使用されると、SQL Server 2005 データベース エンジン はエラー メッセージを返し、クエリをキャンセルします。

解説

expression のデータ型が別名データ型の場合、戻り値の型も別名データ型になります。ただし、tinyint から int への変換など、別名データ型の基本データ型が昇格する場合、戻り値は別名データ型ではなく昇格したデータ型になります。

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) '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)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手