平成27年度 秋期 応用情報技術者試験 午前 問29
“倉庫別商品在庫集計”表から在庫数の合計を求めたい。倉庫番号'C003'の倉庫で在庫数が100以上の商品に対して,全ての倉庫における在庫数の合計を求めるSQL文のaに入る適切な字句はどれか。ここで,該当する商品は複数存在するとともに在庫数が100未満の商品も存在するものとする。また,実線の下線は主キーを表す。
倉庫別商品在庫集計(倉庫番号,商品コード,在庫数) ※主キーは「倉庫番号,商品コード」
〔SQL文〕
SELECT 商品コード, SUM(在庫数) AS 在庫合計 FROM 倉庫別商品在庫集計
WHERE [ a ]
GROUP BY 商品コード
キーボード:1〜4 で解答 → 次の問題 ← 前の問題
正解と解説を見る
解答する前に解説を開いたので、この問題は「見て解いた」として記録します(正解数には入りません)。
正解:ウ
副問合せ「倉庫番号 'C003' で在庫数が100以上の商品コード」は,問題文の条件から複数行を返します。外側の問合せでは,商品コードがその集合に含まれる行だけを対象にして,商品コードごとに全倉庫の在庫数を合計する必要があります。
-
ア: 商品コード = (SELECT …)
誤り。「=」による比較では副問合せが1行だけを返す必要があります。該当する商品が複数あるため,エラーになります。 -
イ: 商品コード = ALL (SELECT …)
誤り。「= ALL」は副問合せの全ての値と等しい場合に真になります。異なる商品コードが複数返されるので,全てと等しい商品コードは存在せず,結果は空になります。 -
ウ: 商品コード IN (SELECT …)
正しい。INは副問合せが返す複数の値のいずれかと一致すれば真になります。C003の倉庫で在庫数100以上の商品に該当する行を全倉庫分取り出し,GROUP BYで商品コードごとに在庫数を合計できます。 -
エ: EXISTS (SELECT …)
誤り。この副問合せは外側の行と関連付けられていない(相関がない)ため,該当する行が1行でも存在すれば全ての行で真になります。在庫数が100未満の商品も含めた全商品が集計されてしまいます。
答え
ウ: 商品コード IN (SELECT 商品コード FROM 倉庫別商品在庫集計 WHERE 倉庫番号 = 'C003' AND 在庫数 >= 100)
出典:平成27年度 秋期 応用情報技術者試験 午前 問29