応用情報技術者 2024年 春期 午前2 問26
問題文
“部品”表及び“在庫”表に対し,SQL文実行結果を得た。SQL文のaに入れる字句はどれか。

選択肢
ア:COALESCE(MIN(在庫.在庫数)、 0)
イ:COALESCE(MIN(在庫.在庫数)、 NULL)
ウ:COALESCE(SUM(在庫.在庫数)、 0)(正解)
エ:COALESCE(SUM(在庫.在庫数)、 NULL)
SQLによる発注要否判定【午前2 解説】
要点まとめ
- 結論:発注点と比較するのは、各部品の全倉庫在庫数の合計であるため、
COALESCE(SUM(在庫.在庫数)、0)
が正解です。 - 根拠:在庫は複数倉庫に分散しているため、単一の在庫数ではなく合計値で比較しなければ正確な発注判断ができません。
- 差がつくポイント:NULL値の扱いと集計関数の選択を誤ると、発注判定が誤るため、SUMとCOALESCEの組み合わせを理解することが重要です。
正解の理由
選択肢ウの
COALESCE(SUM(在庫.在庫数)、0)は、在庫数の合計を計算し、在庫が存在しない場合はNULLを0に置き換えます。これにより、部品ごとの全倉庫在庫数を正しく集計し、発注点と比較できるため、発注要否の判定が正確になります。
よくある誤解
- MIN関数を使うと最小在庫数のみを比較してしまい、全体の在庫量を正しく把握できません。
- COALESCEの第二引数にNULLを指定しても意味がなく、NULLのままでは比較ができません。
解法ステップ
- 部品ごとに複数倉庫の在庫数を集計する必要があることを理解する。
- 在庫数の合計を求めるためにSUM関数を使う。
- 在庫が存在しない部品はNULLになるため、COALESCEで0に置き換える。
- 発注点と集計した在庫数を比較し、発注要否を判定する。
- LEFT OUTER JOINで在庫がない部品も結果に含める。
- GROUP BYで部品ごとに集計する。
選択肢別の誤答解説
- ア:
COALESCE(MIN(在庫.在庫数)、0)
→ 最小在庫数のみを比較し、全体の在庫量を反映しないため誤り。 - イ:
COALESCE(MIN(在庫.在庫数)、NULL)
→ COALESCEの第二引数にNULLを指定しても意味がなく、NULLのまま比較してしまう。 - ウ:
COALESCE(SUM(在庫.在庫数)、0)
→ 正解。全倉庫の在庫数合計を正しく計算し、NULLを0に置換して比較可能。 - エ:
COALESCE(SUM(在庫.在庫数)、NULL)
→ NULLのままでは比較できず、発注判定が正しく行えない。
補足コラム
SQLの集計関数SUMはNULL値を無視して計算しますが、該当行が存在しない場合は結果がNULLになります。LEFT OUTER JOINで在庫がない部品も含める場合、NULLを0に置き換えるCOALESCEの利用が必須です。また、MIN関数は最小値を返すため、合計値を求める発注判定には不適切です。
FAQ
Q: なぜSUM関数を使うのですか?
A: 複数倉庫に分散した在庫数を合計し、部品全体の在庫量を把握するためです。
A: 複数倉庫に分散した在庫数を合計し、部品全体の在庫量を把握するためです。
Q: COALESCEの役割は何ですか?
A: NULL値を指定した値(ここでは0)に置き換え、比較や計算を可能にします。
A: NULL値を指定した値(ここでは0)に置き換え、比較や計算を可能にします。
関連キーワード: SQL, 集計関数、COALESCE, LEFT OUTER JOIN, 発注判定、在庫管理、NULL処理

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

