本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

令和6年度 春期 応用情報技術者試験問題と解説

問26

“部品”表及び“在庫”表に対し、SQL文を実行して結果を得た。SQL文の a に入
れる字句はどれか。

 部品       在庫          
┌───┬───┐┌───┬───┬───┐
│部品ID│発注点││部品ID│倉庫ID│在庫数│
┝━━━┿━━━┥┝━━━┿━━━┿━━━┥
│P01│100││P01│W01│ 90│
├───┼───┤├───┼───┼───┤
│P02│150││P01│W02│ 90│
├───┼───┤├───┼───┼───┤
│P03│100││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)

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

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

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


正解


解説

COALESCE(式1, 式2, ・・・, 式N) は、式1が非NULLなら式1を返すが、式1がNULLなら式2を返す。さらに式2がNULLなら、式3を返す。・・・さらに式NがNULLならNULLを返す、という関数である。
0を返さないと部品.発注点と大小比較ができないので、アかウに絞られる。

また、MIN()は最小値を返す関数であり、SUM()は合計値を返す関数である。
在庫テーブルにおいて、部品P01は倉庫W01,W02にあり、発注要否が不要であるから、  a   の中には、MINではなく、SUMでなければならないことが判る。(MINなら90で、発注点より小さくなるから必要となるはず)

SQL文の意味は、以下のとおり。
SELECT 部品.部品ID AS 部品ID,
 CASE WHEN 部品.発注点 > COALESCE(SUM(在庫.在庫数), 0)
  THEN N ’必要’ ELSE N '不要’ END AS 発注要否
FROM 部品 LEFT OUTER JOIN 在庫
 ON 部品.部品ID = 在庫.部品ID

GROUP BY 部品.部品ID, 部品.発注点

在庫テーブルに部品IDがあってもなくても部品IDとして部品テーブルの部品IDとともに
発注要否として部品テーブルの部品IDと発注点別に在庫テーブルの在庫数を足し、在庫テーブルに部品IDがなければ0として計算して、結果がもし発注点より小さければ、定数'必要’そうでなければ定数'不要’を出力しなさい。

問25 目次 問27