問題
SQLの集計関数で「テーブルの行数(NULLも含めて)」を返すものはどれか。
選択肢
- 1COUNT(列名)
- 2COUNT(*)
- 3COUNT(DISTINCT 列名)
- 4SUM(*)
正解
2. COUNT(*)
詳しい解説を見る解説を閉じる
解説
COUNT(*)は列の値ではなく行そのものを数えるため、NULLを含む行も漏れなく集計され、テーブルの全行数を返す。これに対しCOUNT(列名)は指定列の値がNULLでない行だけを数え、COUNT(DISTINCT 列名)はさらに重複を除いた異なる値の個数を返すため、NULLや重複がある場合は全行数と一致しない。SUM(*)という構文はSQLに存在せず文法エラーとなる。SUMやAVGなどの集計関数は原則としてNULLを無視して計算するが、COUNT(*)だけは行単位で数えるためNULLの影響を受けないという違いが本問の核心である。「*は行ごと、列名指定はNULL除外」と覚えれば、AVG(列名)とSUM(列名)÷COUNT(*)の結果が一致しない場合がある理由も説明できる。
一問一答
全400問を繰り返し学習