Oracle SQL 関数 : AVG : データの平均値を返す
numberRet := AVG( [ALL , DISTINCT] <expr> ) AVGは集計関数、または分析関数として使用します。 <expr>がNULLの項目は計算されません。また、DISTINCT指定の場合は重複行は計算されません。 デフォルトでは ALL の処理となります。
以下の様な担当者テーブルを例にとり、給料の平均値を求めてみます。
(尚、担当者コード「8」の給料は意図的に NULL にしました。)
SQL> SELECT * FROM TM_担当者;
担当者コード 上司コード 部門コード 担当者名 生年月日 給料
------------ ---------- ---------- -------------------------------- -------- ----------
1 1 斎藤 60-04-05 200000
2 1 山田 57-10-15 250000
3 1 田中 62-07-08 240000
4 1 1 島田 67-05-05 180000
5 1 2 鈴木 70-06-04 190000
6 1 2 田村 75-08-01 210000
7 2 3 山下 72-03-18 300000
8 2 3 山村 76-09-18
9 3 3 多田 78-12-10 200000
9行が選択されました。
以下のSQL文を見て下さい。最初のSQL文は全てのテーブルに対して「給料」の平均値を取得しています。
二つ目のSQL文は「部門コード」でグループ化を行いそれぞれの「給料」の平均値を取得します。
SQL> SELECT COUNT(給料), SUM(給料), AVG(給料) FROM TM_担当者;
COUNT(給料) SUM(給料) AVG(給料)
----------- ---------- ----------
8 1770000 221250
SQL> SELECT 部門コード, COUNT(給料), SUM(給料), AVG(給料) FROM TM_担当者
2 GROUP BY 部門コード;
部門コード COUNT(給料) SUM(給料) AVG(給料)
---------- ----------- ---------- ----------
1 4 870000 217500
2 2 400000 200000
3 2 500000 250000
SQL>
「AVG(給料)」の値は「SUM(給料)」を「COUNT(給料)」で割った結果になっています。
尚、結果から担当者コード「8」のデータは除外されていることは「COUNT(給料)」の値を見ても分かると思います。