応用情報技術者令和4年秋期 午前問28

問28

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

〔SQL文〕
SELECT DISTINCT 仕入先コード FROM 商品
 WHERE (販売単価 - 仕入単価) >
  (SELECT AVG (販売単価 - 仕入単価) FROM 商品)
28.gif/image-size:426×301
  • 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/image-size:540×301
この4行から成る中間表から、仕入先コード列が抽出されます。このとき、DISTINCTがあるので重複する行は1つにまとめられます。
28_2.gif/image-size:101×107
したがって、結果表に含まれる仕入先コード数は「3つ」となります。
© 2010-2024 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop