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(給料)」の値を見ても分かると思います。
本書用のWebアプリを使ってSQLを実行し学習していきます。初心者の方に分かりやすく、図表を多く使って解説されています。 学習の最後には200問越えのドリルが付いていてSQLのスキルが試せる様になっています。