SkillStack
テクノロジ系26 / 80問

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

"部品"表及び"在庫"表に対し、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、部品.発注点

応用情報技術者試験 令和6年度 春期 午前 問26の図表

選択肢を押すと答え合わせができます。

正解と解説を見る

【正解】ウ

発注要否は、部品ごとの発注点と、全倉庫の在庫数の合計を比較して判定します。そのため、在庫数を合計するSUMを使用し、在庫行が存在しない場合のNULLを0に置き換えるCOALESCEを組み合わせます。

画像の値で計算すると、P01は90+90=180個なので、100>180は偽となり「不要」です。P02は150個なので、150>150は偽となり「不要」です。P03は在庫表に行がなく、SUMの結果がNULLになりますが、COALESCEによって0に変換されます。したがって、100>0が真となり「必要」です。以上から、COALESCE(SUM(在庫.在庫数), 0)が適切です。

アのCOALESCE(MIN(在庫.在庫数), 0)は誤りです。MINは複数倉庫のうち最小の在庫数を求める集約関数です。P01では90となり、100>90から誤って「必要」と判定されます。

イのCOALESCE(MIN(在庫.在庫数), NULL)は誤りです。最小値を用いる点に加え、P03のNULLを有効な数値に置き換えられません。

エのCOALESCE(SUM(在庫.在庫数), NULL)は誤りです。合計を求める点は適切ですが、P03では比較結果が不明となり、CASEのELSE側で「不要」になります。

【ポイント】 SUMは対象行がない場合にNULLとなるため、COALESCEで0に置き換えます。 LEFT OUTER JOINを使うと、在庫行がないP03も結果から失われません。 SQLでは発注点と在庫数が等しい場合、「>」は偽です。

出典:令和6年度 春期 応用情報技術者試験 午前 問26
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。

この回の80問を、アプリで通しで解く

  • 本番と同じ問題数・制限時間で通し演習(模試モード)
  • 間違えた問題は自動で「復習すべき問題」に回る
  • 解説で分からない点はAIに質問できる
SkillStackで無料で始める