SQL道場 集計関数 AVG関数

SQLで平均値を算出するAVG関数について記載しています。

対応データベース:SQLServer MySQL Oracle PostgreSQL DB2 SQLite Access ANSI

AVG関数の文法

SELECT AVG(|DISTINCT or ALL | 列名) FROM テーブル
SELECT AVG (| DISTINCT or ALL | column name) FROM table
引数
Arguments
列名
Column name
数値が収納されている列の列名を指定
Specifies the column name of the column containing the number
返値
return value
数値型 指定された列のNULL値以外の平均値の数値
numeric The numeric value of the non-null average of the specified column

AVG関数は指定された列のNULL値以外の平均値を算出します。

DISTINCTを指定した場合は、引数で指定された列の重複を除いた平均値を算出します。ALLを指定した場合、引数で指定された列のすべての値から平均値を算出します。DISTINCT、ALLのどちらも指定しない場合は、ALLを指定した場合と同様の挙動になります。また、group by句と併せて指定するとGROUP BYで指定した列のデータ毎の平均値を算出します。AVG関数は数値型の列にのみ使用できます。

実行例

社員テーブル(employee table)

社員名(EMP_NAME)年齢(EMP_AGE)性別(EMP_SEX)時給(EMP_SALARY)
山田太郎201,000
鈴木花子351,500
竹下次郎422,500
佐藤梅子18800
ジュン鎌田20800
田中誠二382,500

MySQLの実行例

/* MySQLで時給の平均を求めるサンプル */
SELECT AVG(EMP_SALARY) FROM testdb.MST_EMPLOYEE;
AVG関数サンプル実行結果
/* MySQLで重複を除いた時給の平均を求めるサンプル */
SELECT AVG(DISTINCT EMP_SALARY) FROM testdb.MST_EMPLOYEE;
AVG関数サンプル実行結果
/* MySQL年齢ごとに時給の重複を除いた平均を求めるサンプル */

SELECT AVG(DISTINCT EMP_SALARY) FROM testdb.MST_EMPLOYEE GROUP BY EMP_AGE;
AVG関数サンプル実行結果

SQLServerの実行例

/* SQLServerで時給の平均を求めるサンプル */
SELECT AVG(EMP_SALARY) FROM [testdb].[dbo].[MST_EMPLOYEE];
AVG関数サンプル実行結果
/* SQLServerで重複を除いた時給の平均を求めるサンプル */
SELECT AVG(DISTINCT EMP_SALARY) FROM [testdb].[dbo].[MST_EMPLOYEE];
AVG関数サンプル実行結果
/* SQLServer年齢ごとに時給の重複を除いた平均を求めるサンプル */
SELECT AVG(DISTINCT EMP_SALARY) FROM [testdb].[dbo].[MST_EMPLOYEE] GROUP BY EMP_AGE;
AVG関数サンプル実行結果