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

テクノロジデータベース

この問題は2024(R6)春 応用情報技術者 午前に出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

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

解答・解説を読む

正解: 選択肢

この設問は、SQLの集計関数と COALESCE 関数の働きに関する理解を問う問題です。

SQL文において、各部品の総在庫数を求めるには、在庫表の在庫数を合計する必要があるため、集計関数である SUM を使用します。
また、外部結合などによって在庫データが存在しない(結果が NULL となる)部品について、在庫数を 0 として表示するためには、引数の中で最初に NULL でない値を返す COALESCE 関数を用います。
COALESCE(SUM(在庫.在庫数), 0) と記述することで、在庫数の合計が NULL の場合は 0 を返すようになります。

各選択肢の解説

  • COALESCE(MIN(在庫.在庫数), 0): MIN 関数は最小値を求める関数であり、在庫の合計を求める目的には適していません。
  • COALESCE(MIN(在庫.在庫数), NULL): MIN 関数を使用している点に加えて、NULL のときに NULL を返す指定(第2引数が NULL)になっており、COALESCE 関数を使う意味がありません。
  • COALESCE(SUM(在庫.在庫数), 0): 正解です。 在庫の合計を求め、存在しない場合は 0 を返します。
  • COALESCE(SUM(在庫.在庫数), NULL): SUM 関数で合計を求めていますが、第2引数が NULL であるため、合計が NULL の場合に結局 NULL が返されてしまい、適切ではありません。