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(給料)」の値を見ても分かると思います。