平均の求め方に関する注意:
集計関数を利用するときには、その計算結果を誤って使用することの内容に注意が必要。
集計関数AVGについて以下の問題について考えて見よう。
問題: チーム打率 を求めるには?
打率: 大雑把に説明すると、バッターとピッチャーが勝負した結果、バッターがヒット(〜ホームラン)を打つ率。 ヒット本数÷勝負の回数 (エラー、四死球は除く)
チーム打率: 野球チームの、チームとしての平均的な打率。
考え方:
その1 | 各バッターの 打率 を求める。 次に 求めた打率の平均 を求める |
その2 | チーム全体の ヒット数 と 打数 を合計で求める。 次に、 チームヒット数/チーム打数 でチーム打率を求める。 |
その3 | チーム全体の 平均ヒット数 と 平均打数 を求める。 次に、 平均ヒット数/平均打数 でチーム打率 を求める。 |
上記で、考え方 その1 は 誤り であるので注意すること。
説明:
チームのメンバーが以下の4名であるとする。
Aがヒットの数、Bが打数とする。
(野球でイメージしにくい場合は、サッカーの選手の成績として
A→ゴール回数、 B→ シュート回数
で考えてみる)
名前 | A | B | A/B |
選手1 | 3 | 10 | 0.3 |
選手2 | 6 | 20 | 0.3 |
選手3 | 2 | 4 | 0.5 |
選手4 | 1 | 2 | 0.5 |
-------------- | |||
SUM | 12 | 36 | |
AVG | 3 | 9 | 0.4 |
A/Bの平均=(0.3+0.3+0.5+0.5)/4=0.4
テーブル全体でのA/Bを計算=
SUM(A)/SUM(B)=12/36=0.333
Aの平均/Bの平均の計算=
AVG(A)/AVG(B)=3/9=0.333 = (SUM(A) / COUNT(*)) / (SUM(B) / COUNT(*))
ゆえに、
AVG(A)/AVG(B)=SUM(A) / SUM(B)
(まとめ)
上記の例においては、出場回数などが各選手ごとに異なるので、そこを考慮せずに直接、各選手の平均値の平均を取ることでチームの平均とするのは間違っている。