基本情報技術者 2015年 秋期 午前(科目A) 問28
問題文
“出庫記録”表に対するSQL文のうち、最も大きな値が得られるものはどれか。

選択肢
ア:SELECT AVG(数量) FROM 出庫記録 WHERE 商品番号 = 'NP200'
イ:SELECT COUNT(*) FROM 出庫記録(正解)
ウ:SELECT MAX(数量) FROM 出庫記録
エ:SELECT SUM(数量) FROM 出庫記録 WHERE 日付 = '2015-10-11'
出庫記録に対するSQL文のうち、最も大きな値が得られるものはどれか。【午前2 解説】
要点まとめ
- 結論:提示された4つのSQLのうち最も大きな値を返すのは行数を数える SELECT COUNT(*) で値は4となる。
- 根拠:各集計の結果は AVG(数量)=2、MAX(数量)=3、SUM(2015-10-11)=3、COUNT(*)=4 と表の数値から算出できるため。
- 差がつくポイント:COUNT(*) は行数を返し NULL を含めない列指定の COUNT(列) と挙動が異なる点を押さえておくと実戦で有利。
正解の理由
与えられた表の数量列の値は 3、2、1、2 の4行です。各選択肢が返す値を計算すると
- ア: AVG(数量) WHERE 商品番号='NP200' → NP200 の数量は 3 と 1、平均は
- イ: SELECT COUNT(*) → 全行数 4
- ウ: SELECT MAX(数量) → 最大値 3
- エ: SUM(数量) WHERE 日付='2015-10-11' → 2015-10-11 の数量は 1 と 2、合計は 3
この中で最大値は 4 であり、したがって正解は イ(SELECT COUNT(*) FROM 出庫記録)です。
よくある誤解
- AVG と SUM を混同して、平均が合計より大きくなると誤認すること。行数を確認すれば誤りに気付けます。
- COUNT(*) と COUNT(列名) の違いを知らず、NULL の有無で結果が変わる点を無視するミス。
- 「最も大きな値」を「最も大きな単一の数量(MAX)」と読み替えてしまい COUNT を見落とす誤り。
解法ステップ
- 表の全データを整理する(数量列:3、2、1、2)。
- 各SQLが何を返すかを理解する(COUNT, AVG, MAX, SUM の意味)。
- 実際に各集計値を計算する:AVG( NP200 )=2、MAX=3、SUM(2015-10-11)=3、COUNT(*)=4。
- 得られた数値を比較し、最大のものを選ぶ(最大は4なので COUNT(*))。
選択肢別の誤答解説
- ア: SELECT AVG(数量) FROM 出庫記録 WHERE 商品番号 = 'NP200'
NP200 のレコードは数量 3 と 1。平均は 。最大ではない。 - イ: SELECT COUNT(*) FROM 出庫記録
全行数を返すため結果は 4。提示された選択肢の中で最大となる(正解)。 - ウ: SELECT MAX(数量) FROM 出庫記録
数量の最大は 3(1行目の3)。COUNT(*) の4に及ばない。 - エ: SELECT SUM(数量) FROM 出庫記録 WHERE 日付 = '2015-10-11'
2015-10-11 の数量は 1 と 2、合計は 3。これも最大ではない。
補足コラム
- COUNT(*) はテーブルの行数を返し、COUNT(列名) は NULL を無視してカウントします。NULL が混在するデータでは両者の差に注意してください。
- 複数の集計結果を比較して「どれが最大か」を問う問題では、各集計関数の定義を明確に理解して手計算で評価するのが早いです。
- 実務ではサブクエリや GREATEST 関数(RDBMS による)で複数値の比較を行うこともありますが、試験問題では手計算で十分対応できます。
FAQ
Q1. COUNT() と COUNT(数量) はいつ結果が変わりますか?
A1. 数量列に NULL が含まれている場合、COUNT() は NULL を含めて行数を数えますが、COUNT(数量) は NULL をカウントしません。NULL がない本問では差は生じません。
A1. 数量列に NULL が含まれている場合、COUNT() は NULL を含めて行数を数えますが、COUNT(数量) は NULL をカウントしません。NULL がない本問では差は生じません。
Q2. AVG の結果が小数になることはありますか?
A2. はい。平均は合計を行数で割るため整数でない場合は小数になります。本問では整数値 2 でした。
A2. はい。平均は合計を行数で割るため整数でない場合は小数になります。本問では整数値 2 でした。
Q3. 複数の集計結果を SQL 内で比較する方法は?
A3. サブクエリや CASE 式、RDBMS により GREATEST 関数などを使い、各集計値を算出して比較します。
A3. サブクエリや CASE 式、RDBMS により GREATEST 関数などを使い、各集計値を算出して比較します。
関連キーワード: SQL, 集計関数, COUNT, SUM, AVG, MAX, NULL処理, GROUP BY, 行数カウント, 集計比較

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

