データベースの基礎
試験表の点数の列に、80、NULL、70、90 の4つの値がある(NULLは未受験を表す)。SELECT AVG(点数) FROM 試験 の結果はどれか。
- A60
- B80
- CNULL
答えと解説を見る
正解:B. 80
SQLの集約関数(SUM、AVG、MAX、MIN、列を指定したCOUNT)は、NULLを無視して計算します。AVG(点数)は、NULLでない3つの値の平均なので、(80 + 70 + 90) ÷ 3 = 240 ÷ 3 = 80 です。NULLを0とみなして4で割ると 240 ÷ 4 = 60 になりますが、AVGはそのようには計算しません。未受験者を0点として平均したいときは、AVG(COALESCE(点数, 0)) のように、NULLを0に置き換えてから集計します。なお、値がすべてNULLの場合は、AVGの結果はNULLになります。
- A. NULLを0とみなして4で割った値です。AVGはNULLを無視します。
- B. 正しい。NULLを除いた3つの値の平均で、240 ÷ 3 = 80 です。
- C. 1つでもNULLがあると結果がNULLになるのは、+ のような演算の場合です。集約関数はNULLを無視します。