応用情報技術者試験 応用情報技術者試験 令和6年度春期 午前26: “部品”表及び“在庫”表に対し,SQL 文を実行して結果を得た。SQL 文の a に入れる字句はどれか。 部品 在庫 〔結果〕 〔SQL 文〕 SELECT 部

応用情報技術者試験 令和6年度春期 午前
Q 2626 / 80
“部品”表及び“在庫”表に対し,SQL 文を実行して結果を得た。SQL 文の a に入れる字句はどれか。 部品
部品ID発注点
P01100
P02150
P03100
在庫
部品ID倉庫ID在庫数
P01W0190
P01W0290
P02W01150
〔結果〕
部品ID発注要否
P01不要
P02不要
P03必要
〔SQL 文〕 SELECT 部品.部品ID AS 部品ID, CASE WHEN 部品.発注点 > a THEN N'必要' ELSE N'不要' END AS 発注要否 FROM 部品 LEFT OUTER JOIN 在庫 ON 部品.部品ID = 在庫.部品ID 部品.部品ID, 部品.発注点
この問の正解率:51.44%(1,322件)

問題本文

“部品”表及び“在庫”表に対し,SQL 文を実行して結果を得た。SQL 文の a に入れる字句はどれか。 部品 在庫 〔結果〕 〔SQL 文〕 SELECT 部品.部品ID AS 部品ID, CASE WHEN 部品.発注点 > a THEN N'必要' ELSE N'不要' END AS 発注要否 FROM 部品 LEFT OUTER JOIN 在庫 ON 部品.部品ID = 在庫.部品ID GROUP BY 部品.部品ID, 部品.発注点

選択肢

  • .COALESCE(MIN(在庫.在庫数), 0)
  • .COALESCE(MIN(在庫.在庫数), NULL)
  • .COALESCE(SUM(在庫.在庫数), 0)
  • .COALESCE(SUM(在庫.在庫数), NULL)

正解

. COALESCE(SUM(在庫.在庫数), 0)

解説

結果から、各部品の全倉庫の在庫数の合計が発注点を下回る(発注点>合計在庫数)とき「必要」となるロジックを読み取る。P01は90+90=180で発注点100以下なので不要、P02は150で発注点150以下なので不要、P03は在庫がなく合計0で発注点100を下回るため必要、と結果に一致する。よって複数倉庫の在庫を合算するSUMを使い、さらにP03のように在庫レコードが無く合計がNULLになる場合に0として扱うため COALESCE(SUM(在庫.在庫数), 0) が正しく、ウが正解である。

選択肢ごとの解説

  • .MINは最小在庫数を返すため、P01は90となり発注点100を下回って「必要」となってしまい、結果(P01は不要)と矛盾するため誤り。
  • .MINで判定する点が誤りであるうえ、COALESCEの第2引数をNULLにしてもP03の合計がNULLのまま比較できず「不要」と判定され、結果と合わないため誤り。
  • .正しい。在庫を合算するSUMを用い、在庫レコードのないP03の合計NULLをCOALESCEで0に変換することで、発注点>0となり「必要」と正しく判定できる。
  • .合算のSUMは正しいが、第2引数がNULLではP03の合計NULLが0に置き換わらず、発注点>NULLの比較結果が不定となって「必要」と判定されないため誤り。

応用情報技術者試験 令和6年度春期 午前過去問一覧へ戻る・問26