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

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


問題文

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

選択肢

1
2
3(正解)
4

🔒 解説は解答すると表示されます

平均超過商品の仕入先数【午前2解説】

正解の理由

まず各行について「販売単価 − 仕入単価」を計算すると、合計は 、件数は 件なので平均は (円)です。平均 を厳密に上回る差がある商品は次の4件です。
  • 4行目:(仕入先コード S1)
  • 5行目:(仕入先コード S1)
  • 8行目:(仕入先コード S4)
  • 9行目:(仕入先コード S5)
このうち仕入先コードを重複なく数えると S1, S4, S5 の 3 つになります(DISTINCT による重複排除)。したがって選択肢のうちが正しい答えです。

解法ステップ

  1. 各行で差分 = 販売単価 − 仕入単価 を求める。
    (結果:200, 200, 100, 900, 400, 200, 300, 500, 500, 300)
  2. 差分の合計を求める:。件数 で平均は
    (式:
  3. 各行の差分が平均より大きいかを比較し、該当行を抽出する。該当は 4 行(4,5,8,9)。
  4. 抽出された行の仕入先コードに DISTINCT を適用して重複を除き、個数を数える → 3。

選択肢別の誤答解説

  • ア(1)
    抽出された商品のうち仕入先コードが1種類だけだと誤認したケース。実際は S1 が重複しているため 1 にはならない。
  • イ(2)
    重複除去を誤って行うか、該当商品の数(4)と DISTINCT 後の個数を混同して、2 と誤答することがある。実際の DISTINCT 後は 3。
  • ウ(3)
    正答。上で示したように該当商品の仕入先は S1, S4, S5 の 3 種類である。
  • エ(4)
    「平均を超える商品の件数」をそのまま答えとして使った誤り。クエリは DISTINCT で仕入先コードを返すため、重複を除いた個数を数う必要があり、4 ではない。

よくある誤解

  • 「平均と等しいものも含める」
    問は厳密な不等号 > を使っているため、平均と等しい行(差分が のもの)があっても含めない点に注意。
  • 「商品数と仕入先数の混同」
    サブクエリで商品を絞った後、そのまま商品件数を答えるミスが多い。DISTINCT があるため「仕入先コードのユニーク数」を数える必要がある。
  • 「AVG の計算方法の誤認」
    AVG(販売単価 − 仕入単価) は AVG(販売単価) − AVG(仕入単価) と等しいが、丸めや NULL の扱いに注意する(本問では整数で問題なし)。

補足コラム

同じ結果を得る別の書き方として、件数を直接取得するには次のように書けます(説明用、実行は不要): SELECT COUNT(DISTINCT 仕入先コード) FROM 商品 WHERE (販売単価 - 仕入単価) > (SELECT AVG(販売単価 - 仕入単価) FROM 商品) この形にすると「何件か」という問いに対して直接数値を返すため、問題演習では答え合わせがしやすくなります。

FAQ

Q. 平均が小数になったらどう扱う?
A. SQL の AVG は通常小数で返るため、比較は小数で行われます。今回のように平均が整数でも、条件は正しく評価されます。
Q. AVG の代わりに別の集計を書くときの注意点は?
A. AVG(販売単価) − AVG(仕入単価) は理論上同値ですが、NULL の有無や型変換で挙動が変わる場合があるので注意してください。

関連キーワード: SQL、DISTINCT、AVG、サブクエリ、WHERE、集約関数、重複排除、比較演算子、SELECT COUNT
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する

すぐに利用可能!

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

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