応用情報技術者試験ナビ ロゴ 応用情報技術者試験ナビ
次回試験日:2025年4月20日(あと1日)

応用情報技術者試験 令和4年秋 午前問28 解説付き過去問

問題

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

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


正解

解説

この問題は、副問合せを含むSQL文の動作を理解し、最終的に返される仕入先コードの件数を判断するものです。

  1. 副問合せの意味
    副問合せでは、販売単価から仕入単価を引いた「粗利益」の平均値を求めています。
    SELECT AVG(販売単価 - 仕入単価) FROM 商品
    
    与えられたデータに基づき、各商品の粗利益は以下の通りです。
    200, 200, 100, 900, 400, 200, 300, 500, 500, 300(合計:3,600)
    平均値は 3,60010 = 360 となります。

  2. 主問合せの動作
    副問合せの結果である360を用いて、粗利益が360より大きい商品を抽出します。SQLは次のように動作します。
    SELECT DISTINCT 仕入先コード
    FROM 商品
    WHERE (販売単価 - 仕入単価) > 360
    
    粗利益が360を超える商品は以下の4件です。

    商品名 仕入
    単価
    販売
    単価
    粗利益 仕入先
    コード
    D1001000900S002
    E100500400S003
    H400900500S002
    I300800500S004

  3. 重複の排除
    これらの仕入先コードを取り出すと、S002, S003, S002, S004 となりますが、DISTINCTを指定しているため、重複は排除されます。
    その結果、S002, S003, S004 の3種類が抽出されます。

したがって、正解は「3種類」であり、仕入先コードは3つ存在します。