平成29年度 春期 データベーススペシャリスト試験 午前Ⅱ 問10
テクノロジ/データベースある月の“月末商品在庫”表と“当月商品出荷実績”表を使って,ビュー“商品別出荷実績”を定義した。このビューにSQL文を実行した結果の値はどれか。 月末商品在庫 商品コード|商品名|在庫数 S001|A|100 S002|B|250 S003|C|300 S004|D|450 S005|E|200 当月商品出荷実績 商品コード|商品出荷日|出荷数 S001|2017-03-01|50 S003|2017-03-05|150 S001|2017-03-10|100 S005|2017-03-15|100 S005|2017-03-20|250 S003|2017-03-25|150 〔ビュー“商品別出荷実績”の定義〕 CREATE VIEW 商品別出荷実績(商品コード,出荷実績数,月末在庫数) AS SELECT 月末商品在庫.商品コード, SUM(出荷数), 在庫数 FROM 月末商品在庫 LEFT OUTER JOIN 当月商品出荷実績 ON 月末商品在庫.商品コード = 当月商品出荷実績.商品コード GROUP BY 月末商品在庫.商品コード, 在庫数 〔SQL文〕 SELECT SUM(月末在庫数) AS 出荷商品在庫合計 FROM 商品別出荷実績 WHERE 出荷実績数 <= 300 (注:本サイトでは原問題の表を文字表記に変換しています)
出典:平成29年度 春期 データベーススペシャリスト試験 午前Ⅱ 問10
- ア400
- イ500
- ウ600
- エ700
正解:ア
解説
まずビュー“商品別出荷実績”の内容を求めると,S001は出荷数50+100=150,月末在庫数100,S002は出荷実績なしでSUM結果はNULL,月末在庫数250,S003は出荷数150+150=300,月末在庫数300,S004は出荷実績なしでNULL,月末在庫数450,S005は出荷数100+250=350,月末在庫数200となります。次に,「出荷実績数<=300」という条件(NULLとの比較はunknownとなり除外される)を満たすのはS001(150)とS003(300)だけであり,それぞれの月末在庫数100と300を合計すると400になります。
選択肢ごとの解説
- ア正しい。出荷実績数が300以下となるのはS001(150)とS003(300)であり,それぞれの月末在庫数100と300の合計は400になります。
- イ誤り。500という値は,例えばS001とS005(350は300を超えるため対象外)の在庫数を誤って合算するなど,条件を満たさない商品を含めてしまった場合の値であり,正しい集計ではありません。
- ウ誤り。600という値は,条件を満たさないS002やS004の月末在庫数を誤って合算してしまった場合などに得られる値であり,正しい集計ではありません。
- エ誤り。700という値は,全商品の月末在庫数(100+250+300+450+200)に近い数字ですが,出荷実績数の条件による絞り込みを行っていない場合の合計であり,正しい集計ではありません。