令和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 | 必要 |

図の説明テキスト
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が返されてしまい、適切ではありません。