過去問解きまくり研究所 ホーム

令和6年度 春期 午前 問26

データベース

発注点に関する問題

“部品”表及び“在庫”表に対し,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(SUM(在庫.在庫数), 0)

解説

在庫を合計し、行が無い部品は 0 に置きます。

設問は、示された二つの表から示された結果が得られるように、条件式の中の空欄を埋めさせています。軸になるのは、四つの候補が集約の仕方と既定値という二つの軸の組合せでできていることです。まず集約の仕方を決めます。部品 P01 は二つの倉庫に 90 ずつ置かれており、合計を取れば 180 になって発注点の 100 を上回るので、結果の表と同じく発注は不要という判定になります。次に既定値を決めます。部品 P03 は在庫の表に 1 行もありませんが、外側の結合なので行そのものは残り、在庫の側は空値になります。集約は対象が無ければ空値を返すため、そこを 0 に置き換えると、発注点の 100 が 0 を上回って発注が必要という判定になり、これも結果の表と一致します。最後に三行とも当てはめます。P02 は 150 と 150 が等しく、より大きいかを問う比較は成り立たないので、発注は不要という判定になり、示された結果とすべて合います。

ほかの選択肢はなぜ違うのか

出典:令和6年度 春期 応用情報技術者試験 午前 問26(改変:原典の図表をテキストに書き起こした)

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)