オッス、オラhosigaki!
今からAVG関数の勘違いしやすいポイントを、紹介すっぞ!
AVG(2, 1, NULL) の答えは 1?1.5?
name | amount |
---|---|
太郎 | 2 |
次郎 | 1 |
三郎 | 0 |
name | amount |
---|---|
太郎 | 2 |
次郎 | 1 |
三郎 |
上の二つのテーブルは、どちらも三兄弟の干し柿の購入個数が記録されています。
ただし、未購入の三郎については、table1では「0」、table2では空(NULL)と記録されています。
SELECT
AVG(amount)
FROM
table1
SELECT
AVG(amount)
FROM
table2
ここで、3人の平均購入回数を算出したいと思います。
もし上記のクエリを実行した場合、それぞれの抽出結果はいくらになるでしょうか?
.
.
.
答えは、table1の方は「1」、table2のほうは「1.5」になります。
今回は3人の平均購入回数を算出したかったので、答えは「1」が正しくて、「1.5」は間違いです。
ポイント
AVG関数では、NULLは計算の対象外となる
例.AVG(2, 1, 0)
の抽出結果 → 1AVG(2, 1, null)
の抽出結果 → 1.5
思わぬミスリードに繋がらないように、AVG関数で平均値を算出する際は、NULLが入っていないかを確認するようにしましょう!
NULLを含むテーブルから平均値を出す方法
もしも、先ほどのtable2から、3人の平均購入数を算出したい場合は、以下のようにSUM関数と割り算を使うと、正しい結果である「1」が抽出されます。
SELECT
SUM(amount) / 3
FROM
table2
NULLを含むテーブルから平均値を出す場合は、こちらの出し方の方がおすすめです!
最後まで読んでいただきありがとうございました!
また次の記事でお会いしましょう(^^)/