応用情報技術者試験 令和4年秋 午前問28 解説付き過去問
問題
"商品"表に対して、次のSQL文を実行して得られる仕入先コード数は幾つか。
〔SQL文〕

〔SQL文〕
SELECT DISTINCT 仕入先コード FROM 商品
WHERE (販売単価 - 仕入単価) >
(SELECT AVG (販売単価 - 仕入単価) FROM 商品)
WHERE (販売単価 - 仕入単価) >
(SELECT AVG (販売単価 - 仕入単価) FROM 商品)

正解
解説
この問題は、副問合せを含むSQL文の動作を理解し、最終的に返される仕入先コードの件数を判断するものです。
- 副問合せの意味
副問合せでは、販売単価から仕入単価を引いた「粗利益」の平均値を求めています。
SELECT AVG(販売単価 - 仕入単価) FROM 商品
与えられたデータに基づき、各商品の粗利益は以下の通りです。
200, 200, 100, 900, 400, 200, 300, 500, 500, 300(合計:3,600)
平均値は 3,60010 = 360 となります。 - 主問合せの動作
副問合せの結果である360を用いて、粗利益が360より大きい商品を抽出します。SQLは次のように動作します。
SELECT DISTINCT 仕入先コード FROM 商品 WHERE (販売単価 - 仕入単価) > 360
粗利益が360を超える商品は以下の4件です。
商品名 仕入
単価販売
単価粗利益 仕入先
コードD 100 1000 900 S002 E 100 500 400 S003 H 400 900 500 S002 I 300 800 500 S004 - 重複の排除
これらの仕入先コードを取り出すと、S002, S003, S002, S004 となりますが、DISTINCTを指定しているため、重複は排除されます。
その結果、S002, S003, S004 の3種類が抽出されます。
したがって、正解は「3種類」であり、仕入先コードは3つ存在します。