戦国IT - 情報処理技術者試験の過去問対策サイト
お知らせお問い合わせ料金プラン

応用情報技術者 2022年 秋期 午前228


問題文

“商品”表に対して、次の SQL文を実行して得られる仕入先コード数は幾つか。   〔SQL文〕
 SELECT DISTINCT 仕入先コード FROM 商品
  WHERE(販売単価 - 仕入単価) >
     (SELECT AVG (販売単価 - 仕入単価) FROM 商品)
応用情報技術者 2022年 秋期 午前2 問28の問題画像

選択肢

1
2
3(正解)
4

商品表に対してのSQL文の仕入先コード数算出【午前2 解説】

要点まとめ

  • 結論:販売単価と仕入単価の差が平均より大きい商品の仕入先コードは3つ存在します。
  • 根拠:まず各商品の差を計算し、その平均を求め、平均を超える差の商品の仕入先コードを抽出します。
  • 差がつくポイント:平均値の計算とWHERE句の条件理解、DISTINCTによる重複排除の正確な把握が重要です。

正解の理由

SQL文は「販売単価 - 仕入単価」の差が全商品の平均差より大きい商品の仕入先コードを重複なく抽出しています。
表のデータから差を計算すると、平均差は約円で、これを超える差の商品は3件あり、それぞれ異なる仕入先コードが3つ存在するため、正解はの3です。

よくある誤解

平均差の計算を誤り、単純に差の大きい商品の数を数えるだけで終わることがあります。
また、仕入先コードの重複を考慮せず商品数と混同する誤りも多いです。

解法ステップ

  1. 各商品の「販売単価 - 仕入単価」を計算する。
  2. 全商品の差の平均値を求める。
  3. WHERE句の条件「差 > 平均差」を満たす商品のみ抽出する。
  4. 抽出した商品の仕入先コードをDISTINCTで重複排除する。
  5. その結果の仕入先コード数を数える。

選択肢別の誤答解説

  • ア: 1
    差が平均を超える商品の仕入先コードは複数あるため、1は少なすぎます。
  • イ: 2
    2は平均差を正確に計算していないか、重複排除の理解不足による誤りです。
  • ウ: 3
    正解。平均差を正しく計算し、条件を満たす商品の仕入先コード数を正確に抽出しています。
  • エ: 4
    4は条件を満たす商品の仕入先コード数より多く、過剰なカウントです。

補足コラム

SQLの
DISTINCT
は重複する値を1つにまとめるため、仕入先コードの重複を排除できます。
また、サブクエリで平均値を計算し、メインクエリのWHERE句で比較する形は典型的な集約関数の活用例です。

FAQ

Q: なぜ平均差を超える商品のみ抽出するのですか?
A: 問題文の条件が「差が平均より大きい」ため、平均を基準に絞り込みを行います。
Q: DISTINCTを使わないとどうなりますか?
A: 重複した仕入先コードが複数回カウントされ、正しい仕入先コード数が得られません。

関連キーワード: SQL, DISTINCT, サブクエリ、集約関数、平均値、WHERE句、仕入先コード、販売単価、仕入単価
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

応用情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてプライバシーポリシー利用規約特商法表記開発者について