IPA過去問ドリル

令和3年度 春期 システムアーキテクト試験 午前Ⅱ 問24

テクノロジ/データベース

ある月の“月末商品在庫”表と“当月商品出荷実績”表を使って,ビュー“商品別出荷実績”を定義した。このビューに SQL 文を実行した結果の値はどれか。 〔月末商品在庫〕商品コード,商品名,在庫数の順に,(S001,A,100),(S002,B,250),(S003,C,300),(S004,D,450),(S005,E,200) 〔当月商品出荷実績〕商品コード,商品出荷日,出荷数の順に,(S001,2021-03-01,50),(S003,2021-03-05,150),(S001,2021-03-10,100),(S005,2021-03-15,100),(S005,2021-03-20,250),(S003,2021-03-25,150) 〔ビュー“商品別出荷実績”の定義〕 CREATE VIEW 商品別出荷実績(商品コード,出荷実績数,月末在庫数) AS SELECT 月末商品在庫.商品コード, SUM(出荷数), 在庫数 FROM 月末商品在庫 LEFT OUTER JOIN 当月商品出荷実績 ON 月末商品在庫.商品コード = 当月商品出荷実績.商品コード GROUP BY 月末商品在庫.商品コード, 在庫数 〔SQL 文〕 SELECT SUM(月末在庫数) AS 出荷商品在庫合計 FROM 商品別出荷実績 WHERE 出荷実績数 <= 300 (注:本サイトでは原問題の表を文字表記に変換しています)

出典:令和3年度 春期 システムアーキテクト試験 午前Ⅱ 問24

正解:ア

解説

ビュー“商品別出荷実績”は,月末商品在庫表を基準に当月商品出荷実績表を左外結合(LEFT OUTER JOIN)し,商品コードと在庫数ごとに出荷数を合計したものです。各商品の出荷実績数と月末在庫数は,S001:出荷実績数150,月末在庫数100,S002:出荷実績数NULL(出荷実績なし),月末在庫数250,S003:出荷実績数300,月末在庫数300,S004:出荷実績数NULL(出荷実績なし),月末在庫数450,S005:出荷実績数350,月末在庫数200となります。設問のSQL文は,このビューから出荷実績数が300以下の行の月末在庫数を合計するものです。出荷実績数がNULLの行(S002,S004)は比較条件を満たさないため対象外となり,出荷実績数が300を超えるS005(350)も対象外となります。条件を満たすのはS001(月末在庫数100)とS003(月末在庫数300)であり,これらを合計すると100+300=400になります。

選択肢ごとの解説

  • 正しい。条件を満たすS001(月末在庫数100)とS003(月末在庫数300)を合計すると,出荷商品在庫合計は400になります。
  • 誤り。500という値は,条件を満たす行の選び方を誤るなどして得られる値であり,正しい出荷商品在庫合計ではありません。
  • 誤り。600という値は,出荷実績数がNULLとなる行や対象外の行を誤って合計に含めた場合などに得られる値であり,正しい出荷商品在庫合計ではありません。
  • 誤り。700という値は,全ての商品の月末在庫数(100+250+300+450+200の一部など)を誤って合計した場合などに得られる値であり,正しい出荷商品在庫合計ではありません。
システムアーキテクトの過去問を演習モードで解く