問題
“出庫記録”表に対するSQL文のうち,最も大きな値が得られるものはどれか。 出庫記録 商品番号|日付|数量 NP200|2015-10-10|3 FP233|2015-10-10|2 NP200|2015-10-11|1 FP233|2015-10-11|2
キーボード:1〜4で選択・Enterで次へ
答え合わせ
- A
- B
- C
- D
自信の3択
えらぶと、この端末に記録します(登録はいりません)
解説
答えは **b「SELECT COUNT() FROM 出庫記録」* です。
表の4行を使って、それぞれのSQLの結果を計算してみましょう。
- a AVG(平均):商品番号が NP200 の数量は 3 と 1 → 平均 2
- b COUNT(*)(行数):表全体の行数 → 4
- c MAX(最大):数量の最大 → 3
- d SUM(合計):日付が 2015-10-11 の数量は 1 と 2 → 合計 3
いちばん大きいのは b の 4 です。
👉 覚え方:**COUNT()は値ではなく行の数*を数える。AVG・MAX・SUMは列の値を使う。
なぜこれが正解か
正解は b。各SQL文の結果を表の値で計算すると次のとおり。
- a:`AVG(数量) … WHERE 商品番号 = 'NP200'` → NP200 の行は数量 3 と 1 → (3+1)÷2 = 2
- b:`COUNT(*) FROM 出庫記録` → 表の全行数 = 4
- c:`MAX(数量) FROM 出庫記録` → 数量 3,2,1,2 の最大 = 3
- d:`SUM(数量) … WHERE 日付 = '2015-10-11'` → 数量 1 と 2 → 1+2 = 3
最も大きな値が得られるのは b の 4 である。
各選択肢の解説
- a 2:WHERE句で NP200 の2行に絞ってから平均を求める。
- b 4:行数を数える。NULLの有無にかかわらず全行を数える(正解)。
- c 3:全行の数量の最大値。
- d 3:2015-10-11 の2行の数量の合計。
覚え方・ひっかけ注意
集約関数の動作:**COUNT()=行数,COUNT(列)=その列がNULLでない行数,SUM=合計,AVG=平均,MAX/MIN=最大/最小*。WHERE句で行を絞ってから集約される点に注意する。数量の値(最大3)にばかり目が行くと,行数4を見落とす。
理論的背景
SQLの集約関数(COUNT,SUM,AVG,MAX,MIN)は,複数の行をまとめて1つの値を返す。処理の順序は概ね FROM(表の指定)→ WHERE(行の絞り込み)→ GROUP BY(グループ化)→ HAVING(グループの絞り込み)→ SELECT(集約・射影)→ ORDER BY(並べ替え)で,WHERE で絞った後の行に対して集約が行われる。COUNT(*) は行そのものを数えるため NULL を含む行も対象になるが,COUNT(列名)・SUM・AVG・MAX・MIN は NULL の値を無視する。AVG は「NULL でない値の合計 ÷ NULL でない値の個数」で計算されるため,NULL を0として扱う場合とは結果が変わる点に注意が必要である。
実務での使われ方
売上集計,在庫数の確認,アクセスログの件数集計など,業務システムやレポートでは集約関数が日常的に使われる。件数を数える処理では,COUNT(*) と COUNT(DISTINCT 列名) を使い分けることで「延べ件数」と「異なり数(ユニーク数)」を区別できる。大量データでは,集約に使う列へのインデックスや,事前集計したサマリ表(マテリアライズドビュー)で性能を確保する。
試験での位置づけ
基本情報では,表の値から SQL の結果を計算させる問題が定番で,集約関数・WHERE・GROUP BY・HAVING の組合せが頻出。応用情報やデータベーススペシャリストでは,NULL の扱い,副問合せ,結合と組み合わせた集計が問われる。
選択肢の発展補足
本問の4つの値は 2・4・3・3。COUNT(*) は数量の値と無関係に行数を返すため,数量がどれも小さい表では「件数」が最大になり得る。同じ表で `SELECT 商品番号, SUM(数量) FROM 出庫記録 GROUP BY 商品番号` とすれば,NP200 が 4,FP233 が 4 となる。さらに `HAVING SUM(数量) > 3` を付けると,合計が3を超えるグループだけが残る。こうした変形を自分で計算してみると,集約の考え方が定着する。
出典と作り方
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成27年度 秋期 問28/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビ独自の3段階の解説(初級・標準・上級)です。

