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

選択肢
ア:1
イ:2
ウ:3(正解)
エ:4
商品表に対してのSQL文の仕入先コード数算出【午前2 解説】
要点まとめ
- 結論:販売単価と仕入単価の差が平均より大きい商品の仕入先コードは3つ存在します。
- 根拠:まず各商品の差を計算し、その平均を求め、平均を超える差の商品の仕入先コードを抽出します。
- 差がつくポイント:平均値の計算とWHERE句の条件理解、DISTINCTによる重複排除の正確な把握が重要です。
正解の理由
SQL文は「販売単価 - 仕入単価」の差が全商品の平均差より大きい商品の仕入先コードを重複なく抽出しています。
表のデータから差を計算すると、平均差は約円で、これを超える差の商品は3件あり、それぞれ異なる仕入先コードが3つ存在するため、正解はウの3です。
表のデータから差を計算すると、平均差は約円で、これを超える差の商品は3件あり、それぞれ異なる仕入先コードが3つ存在するため、正解はウの3です。
よくある誤解
平均差の計算を誤り、単純に差の大きい商品の数を数えるだけで終わることがあります。
また、仕入先コードの重複を考慮せず商品数と混同する誤りも多いです。
また、仕入先コードの重複を考慮せず商品数と混同する誤りも多いです。
解法ステップ
- 各商品の「販売単価 - 仕入単価」を計算する。
- 全商品の差の平均値を求める。
- WHERE句の条件「差 > 平均差」を満たす商品のみ抽出する。
- 抽出した商品の仕入先コードをDISTINCTで重複排除する。
- その結果の仕入先コード数を数える。
選択肢別の誤答解説
- ア: 1
差が平均を超える商品の仕入先コードは複数あるため、1は少なすぎます。 - イ: 2
2は平均差を正確に計算していないか、重複排除の理解不足による誤りです。 - ウ: 3
正解。平均差を正しく計算し、条件を満たす商品の仕入先コード数を正確に抽出しています。 - エ: 4
4は条件を満たす商品の仕入先コード数より多く、過剰なカウントです。
補足コラム
SQLの
また、サブクエリで平均値を計算し、メインクエリのWHERE句で比較する形は典型的な集約関数の活用例です。
DISTINCTは重複する値を1つにまとめるため、仕入先コードの重複を排除できます。
また、サブクエリで平均値を計算し、メインクエリのWHERE句で比較する形は典型的な集約関数の活用例です。
FAQ
Q: なぜ平均差を超える商品のみ抽出するのですか?
A: 問題文の条件が「差が平均より大きい」ため、平均を基準に絞り込みを行います。
A: 問題文の条件が「差が平均より大きい」ため、平均を基準に絞り込みを行います。
Q: DISTINCTを使わないとどうなりますか?
A: 重複した仕入先コードが複数回カウントされ、正しい仕入先コード数が得られません。
A: 重複した仕入先コードが複数回カウントされ、正しい仕入先コード数が得られません。
関連キーワード: SQL, DISTINCT, サブクエリ、集約関数、平均値、WHERE句、仕入先コード、販売単価、仕入単価

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

