「部品」表及び「在庫」表に対し,次の SQL 文を実行して〔結果〕を得た。SQL 文の a に入れる字句はどれか。 部品(部品ID, 発注点) P01, 100 / P02, 150 / P03, 100 在庫(部品ID, 倉庫ID, 在庫数) P01, W01, 90 / P01, W02, 90 / P02, W01, 150 〔結果〕(部品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 GROUP BY 部品.部品ID, 部品.発注点

テクノロジ系・一部改変

ア COALESCE(MIN(在庫.在庫数), 0)

なぜ違う: MIN は在庫の最小値で、合計による判定にならない。

イ COALESCE(MIN(在庫.在庫数), NULL)

なぜ違う: MIN かつ第2引数 NULL で、合計判定にも NULL 補正にもならない。

ウ COALESCE(SUM(在庫.在庫数), 0)
エ COALESCE(SUM(在庫.在庫数), NULL)

なぜ違う: 第2引数が NULL では P03 が NULL のままで比較が成立せず「必要」にならない。

正解: ウ

要点: 在庫合計 SUM を発注点と比較。在庫なし(P03)は NULL→0 に補う COALESCE(SUM(在庫数),0)。

各部品の在庫合計が発注点を下回れば「必要」。在庫合計は SUM(在庫.在庫数)。在庫がない P03 は LEFT OUTER JOIN で NULL になり SUM も NULL になるため、COALESCE で 0 に置換する。P03 は発注点100>0 で「必要」、P01 は 100>180、P02 は 150>150 でいずれも「不要」となり結果と一致する。

この問題に出てくる用語

関連キーワード: SQL・COALESCE・外部結合

同じ回の前後の問題

テクノロジ系の他の問題

アプリで弱点分析つきの演習ができます

App Store

応用情報技術者の学習アプリ(応用情報トレ)

出典:令和6年度 春期 応用情報技術者試験 午前 問26