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) |
---|---|---|---|
山田太郎 | 20 | 男 | 1,000 |
鈴木花子 | 35 | 女 | 1,500 |
竹下次郎 | 42 | 男 | 2,500 |
佐藤梅子 | 18 | 女 | 800 |
ジュン鎌田 | 20 | 男 | 800 |
田中誠二 | 38 | 男 | 2,500 |
MySQLの実行例
/* MySQLで時給の平均を求めるサンプル */
SELECT AVG(EMP_SALARY) FROM testdb.MST_EMPLOYEE;

/* MySQLで重複を除いた時給の平均を求めるサンプル */
SELECT AVG(DISTINCT EMP_SALARY) FROM testdb.MST_EMPLOYEE;

/* MySQL年齢ごとに時給の重複を除いた平均を求めるサンプル */
SELECT AVG(DISTINCT EMP_SALARY) FROM testdb.MST_EMPLOYEE GROUP BY EMP_AGE;

SQLServerの実行例
/* SQLServerで時給の平均を求めるサンプル */
SELECT AVG(EMP_SALARY) FROM [testdb].[dbo].[MST_EMPLOYEE];

/* SQLServerで重複を除いた時給の平均を求めるサンプル */
SELECT AVG(DISTINCT EMP_SALARY) FROM [testdb].[dbo].[MST_EMPLOYEE];

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