令和4年秋期試験問題 午前問28

"商品"表に対して,次のSQL文を実行して得られる仕入先コード数は幾つか。

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

  • 1
  • 2
  • 3
  • 4
正解 問題へ
分野:テクノロジ系
中分類:データベース
小分類:データ操作
解説
まず、副問合せの部分から考えていきます。
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つです。
28_1.gif
この4行から成る中間表から、仕入先コード列が抽出されます。このとき、DISTINCTがあるので重複する行は1つにまとめられます。
28_2.gif
したがって、結果表に含まれる仕入先コード数は「3つ」となります。

Pagetop