SQL AVG

概要:このチュートリアルでは、SQL AVG関数を使用して集合の平均値を取得する方法を説明します。

SQL AVG関数の紹介

SQL AVG関数は、集合の平均値を計算する集計関数です。以下に、SQL AVG関数の構文を示します。

AVG([ALL|DISTINCT] expression)Code language: SQL (Structured Query Language) (sql)

ALLキーワードを使用すると、AVG関数はすべての値を計算に使用します。デフォルトでは、AVG関数はALLキーワードを指定するかどうかに関わらずALLを使用します。

DISTINCTキーワードを明示的に指定すると、AVG関数は一意の値のみを計算に使用します。

たとえば、(1,2,3,3,4)という集合があり、これにAVG(ALL)を適用すると、AVG関数は次の計算を実行します。

(1+2+3+3+4)/5 = 2.6Code language: SQL (Structured Query Language) (sql)

しかし、AVG(DISTINCT)は次のように処理されます。

(1+2+3+4)/4 = 2.5Code language: SQL (Structured Query Language) (sql)

SQL AVG関数の例

サンプルデータベースのemployeesテーブルを使用して、SQL AVG関数の動作方法を示します。次の図は、employeesテーブルの構造を示しています。

employees_table

すべての従業員の平均給与を計算するには、次のように給与列にAVG関数を適用します。

SELECT 
    AVG(salary)
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL AVG example

DISTINCT演算子を使用して、結果が変わるかどうかを確認してみましょう。

SELECT 
    AVG(DISTINCT salary)
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL AVG DISTINCT example

一部の従業員が同じ給与を受けているため、結果が変わりました。

結果を小数点以下2桁に丸めるには、次のようにROUND関数を使用します。

SELECT 
    ROUND(AVG(DISTINCT salary), 2)
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL AVG with ROUND function example

値のサブセットの平均値を計算するには、WHERE句SELECT文に追加します。たとえば、部署IDが5である従業員の平均給与を計算するには、次のクエリを使用します。

SELECT
	AVG(DISTINCT salary)
FROM
	employees
WHERE
	department_id = 5;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL AVG WHERE example

次の文は、ジョブIDが6である従業員の平均給与を返します。

SELECT 
    AVG(salary)
FROM
    employees
WHERE
    job_id = 6;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL AVG WHERE job id

GROUP BY句を使用したSQL AVGの例

グループの平均値を計算するには、GROUP BY句と共にAVG関数を使用します。たとえば、次の文は、各部署とその部署の従業員の平均給与を返します。

SELECT
	department_id,
	AVG(salary)
FROM
	employees
GROUP BY
	department_id;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL AVG GROUP BY example

内部結合句を使用して、employeesテーブルとdepartmentsテーブルを結合し、部署名データを取得することができます。

SELECT
	e.department_id,
	department_name,
	AVG(salary)
FROM
	employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
	e.department_id;Code language: SQL (Structured Query Language) (sql)

試してみる

SQL AVG with INNER JOIN example

ORDER BY句を使用したSQL AVGの例

AVGの結果を含む結果セットをソートするには、次のようにORDER BY句でAVG関数を使用します。

SELECT
	e.department_id,
	department_name,
	AVG(salary)
FROM
	employees e
INNER JOIN departments d ON d.department_id = e.department_id
GROUP BY
	e.department_id
ORDER BY
	AVG(salary) DESC;

試してみる

SQL AVG with ORDER BY example

HAVING句を使用したSQL AVGの例

グループをフィルタリングするには、HAVING句でAVG関数を使用します。たとえば、次の文は、平均給与が5000未満の部署を取得します。

SQL AVG with HAVING clause example

サブクエリを使用したSQL AVG

1つのSQL文でAVG関数を複数回適用して、平均値の集合の平均値を計算できます。

たとえば、AVG関数を使用して各部署の従業員の平均給与を計算し、AVG関数をもう一度適用して部署の平均給与を計算できます。

次のクエリはその考え方を示しています。

SELECT
	AVG(employee_sal_avg)
FROM
	(
		SELECT
			AVG(salary) employee_sal_avg
		FROM
			employees
		GROUP BY
			department_id
	) t;Code language: SQL (Structured Query Language) (sql)

試してみる

クエリの動作方法。

  • サブクエリは、各部署の従業員の平均給与の集合を返します。
  • 外部クエリは、部署の平均給与を返します。

このチュートリアルでは、SQL AVG関数を使用して集合の平均値を計算する方法を学習しました。

このチュートリアルは役に立ちましたか?