令和4年秋期試験問題 午前問28
問28解説へ
"商品"表に対して,次のSQL文を実行して得られる仕入先コード数は幾つか。
〔SQL文〕
〔SQL文〕
SELECT DISTINCT 仕入先コード FROM 商品
WHERE (販売単価 - 仕入単価) >
(SELECT AVG (販売単価 - 仕入単価) FROM 商品)
WHERE (販売単価 - 仕入単価) >
(SELECT AVG (販売単価 - 仕入単価) FROM 商品)
- 1
- 2
- 3
- 4
広告
解説
まず、副問合せの部分から考えていきます。
(200+200+100+900+400+200+300+500+500+300)÷10=360
なので、副問合せは360という単一値を返します。
副問合せの結果をSQL文に代入すると以下のようになります。
SELECT AVG (販売単価 - 仕入単価) FROM 商品
このSQL文は、"商品"表の各行について販売単価から仕入単価を差し引いた値(粗利益)を求め、その平均値を返すものです。全商品の粗利益の平均値は、(200+200+100+900+400+200+300+500+500+300)÷10=360
なので、副問合せは360という単一値を返します。
副問合せの結果をSQL文に代入すると以下のようになります。
SELECT DISTINCT 仕入先コード FROM 商品
WHERE (販売単価 - 仕入単価) > 360
主問合せ側のWHERE句では、"商品"表の行のうち粗利益(販売単価-仕入単価)が全商品の平均粗利益である360を上回る行が選択されます。粗利益が360より大きいのは、商品D、商品E、商品H、商品Iの4つです。この4行から成る中間表から、仕入先コード列が抽出されます。このとき、DISTINCTがあるので重複する行は1つにまとめられます。したがって、結果表に含まれる仕入先コード数は「3つ」となります。WHERE (販売単価 - 仕入単価) > 360
広告