SQL AVG() 関数
1. SQL AVG() 関数
AVG() 関数は、数値カラムの平均値をリターンします。
この AVG() 関数は、カラム内の NULL 値を無視して計算を行います。
1.1 例(自分専用の SQL Server を取得)
全製品の平均価格を算出する:
-- 全製品の価格の平均を取得 --
SELECT AVG(Price)
FROM Products;注意:NULL 値は計算対象から除外されます。
2. AVG() のシンタックス
SELECT AVG(column_name)
FROM table_name
WHERE condition;3. デモ用データベース
以下は、例題で使用する Products テーブルの抜粋です。
| ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
|---|---|---|---|---|---|
| 1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18.00 |
| 2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19.00 |
| 3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10.00 |
| 4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22.00 |
| 5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
4. WHERE 句の追加
WHERE 句を追加することで、特定の条件を指定して集計できます。
4.1 例
カテゴリ 1 に属する製品の平均価格をリターンする:
-- カテゴリIDが1の製品のみで平均価格を算出 --
SELECT AVG(Price)
FROM Products
WHERE CategoryID = 1;5. エイリアス(Alias)の使用
AS キーワードを使用して、集計結果のカラムに名前を付与します。
5.1 例
カラム名を "average price" に設定する場合:
-- 平均価格に 'average price' という別名を付けて取得 --
SELECT AVG(Price) AS [average price]
FROM Products;6. 平均より高いデータの抽出
平均価格よりも高い価格のレコードをすべてリストアップするには、サブクエリ内で AVG() 関数を使用します。
6.1 例
平均価格よりも高いすべての製品をリターンする:
-- サブクエリで算出した全体の平均値より高い製品を抽出 --
SELECT * FROM Products
WHERE price > (SELECT AVG(price) FROM Products);7. GROUP BY と AVG() の併用
ここでは AVG() 関数と GROUP BY 句を併用して、"Products" テーブルのカテゴリごとの平均価格をリターンします。
7.1 例
-- カテゴリIDごとにグループ化し、それぞれの平均価格を算出 --
SELECT AVG(Price) AS AveragePrice, CategoryID
FROM Products
GROUP BY CategoryID;