【SQL】AVG(2, 1, NULL) の答えは、「1」or「1.5」のどっち?

【SQL】AVG(2, 1, NULL) の答えは、「1」or「1.5」のどっち?

hosigaki

オッス、オラhosigaki!
今からAVG関数の勘違いしやすいポイントを、紹介すっぞ!

AVG(2, 1, NULL) の答えは 1?1.5?

nameamount
太郎2
次郎1
三郎0
table1
nameamount
太郎2
次郎1
三郎
table2

上の二つのテーブルは、どちらも三兄弟の干し柿の購入個数が記録されています。
ただし、未購入の三郎については、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) の抽出結果 → 1
AVG(2, 1, null) の抽出結果 → 1.5

思わぬミスリードに繋がらないように、AVG関数で平均値を算出する際は、NULLが入っていないかを確認するようにしましょう!

NULLを含むテーブルから平均値を出す方法

もしも、先ほどのtable2から、3人の平均購入数を算出したい場合は、以下のようにSUM関数と割り算を使うと、正しい結果である「1」が抽出されます。

SELECT
    SUM(amount) / 3
FROM
    table2

NULLを含むテーブルから平均値を出す場合は、こちらの出し方の方がおすすめです!

最後まで読んでいただきありがとうございました!
また次の記事でお会いしましょう(^^)/

-SQL
-