データベースの基礎
成績表の点数の列に、50、NULL、70、NULL、90、30 の6つの値がある。SELECT COUNT(*), COUNT(点数), AVG(点数) FROM 成績 の結果を順に並べたものはどれか。
- A6, 6, 40
- B6, 4, 40
- C6, 4, 60
答えと解説を見る
正解:C. 6, 4, 60
COUNT(*)は、NULLを含むかどうかに関係なく行の数を数えるので6です。COUNT(点数)のように列を指定すると、その列がNULLでない行だけを数えるので4です。AVG(点数)は、NULLでない4つの値の合計 50 + 70 + 90 + 30 = 240 を、NULLでない値の個数4で割るので 240 ÷ 4 = 60 です。合計を全体の行数で割った SUM(点数) / COUNT(*) = 240 ÷ 6 = 40 とは一致しないことに注意が必要です。NULLを0点として扱いたいなら、COALESCE(点数, 0) で置き換えてから集計します。
- A. NULLを0とみなした場合の結果です。COUNT(点数)はNULLの行を数えません。
- B. AVGを、合計を全体の行数6で割った値と取り違えています。
- C. 正しい。行数は6、NULLでない値は4個、その平均は 240 ÷ 4 = 60 です。