データベーススペシャリスト試験 2022年 午前207


“商品”と“商品別売上実績”表に対して, SQL文を実行して得られる売上平均金額はどれか。
問題画像
100
150(正解)
225
275

解説

“商品”と“商品別売上実績”表に対して, SQL文を実行して得られる売上平均金額はどれか。【午前2 解説】

要点まとめ

  • 結論:商品ランクが'A'の商品の売上合計金額の平均は150である。
  • 根拠:商品ランク'A'の対象はS001, S002, S003で、売上実績はS001=50、S003=250、S002はNULL(0扱い)となるため平均は(50+0+250)/3=100。
  • 差がつくポイント:LEFT OUTER JOINで売上実績がない商品も含める点と、WHERE句で商品ランクを絞る点の理解が重要。

正解の理由

SQL文は「商品」表を基準に「商品別売上実績」表をLEFT OUTER JOINし、商品ランクが'A'の行だけを対象としています。
商品ランク'A'の3商品(S001, S002, S003)のうち、S002は売上実績がないためNULLとなりますが、LEFT OUTER JOINにより行は残ります。
AVG関数はNULLを除外して計算するため、売上合計金額は50(S001)と250(S003)の2件の平均、つまり(50+250)/2=150となります。
したがって、正解はイ: 150です。

よくある誤解

LEFT OUTER JOINでNULLが含まれてもAVGはNULLを無視して計算するため、NULLを0として計算する誤解が多いです。
また、GROUP BYで1グループにまとめているため、複数行の平均を誤認することがあります。

解法ステップ

  1. 商品ランクが'A'の商品の商品コードを抽出(S001, S002, S003)。
  2. 商品別売上実績表とLEFT OUTER JOINし、売上合計金額を結合。
  3. 売上実績がない商品(S002)はNULLとなる。
  4. WHERE句で商品ランク='A'を絞り込む。
  5. GROUP BY商品ランクで1グループにまとめる。
  6. AVG関数はNULLを除外して計算するため、売上合計金額の平均は(50+250)/2=150となる。

選択肢別の誤答解説

  • ア: 100
    売上実績がない商品を0と誤認し、(50+0+250)/3=100と計算した誤り。AVGはNULLを除外するため誤り。
  • イ: 150
    正解。NULLを除外し、売上実績がある2件の平均を正しく計算。
  • ウ: 225
    売上実績がある2件の合計(300)のうち1件だけを平均と誤認した可能性。
  • エ: 275
    売上実績がある商品の最大値や誤った計算結果。根拠がない。

補足コラム

LEFT OUTER JOINは左表の全行を保持し、右表に対応する行がなければNULLを補う結合です。
SQLのAVG関数はNULL値を自動的に除外して計算するため、NULLを0として計算しない点に注意が必要です。
GROUP BY句は集約関数と組み合わせてグループ単位の計算を行いますが、今回のように1グループのみの場合は単純な平均値となります。

FAQ

Q: LEFT OUTER JOINでNULLが含まれる場合、AVG関数はどう計算しますか?
A: AVG関数はNULL値を除外して計算するため、NULLは平均値の計算に影響しません。
Q: WHERE句で商品ランクを指定すると、LEFT OUTER JOINの意味は変わりますか?
A: WHERE句は結合後の結果に条件をかけるため、LEFT OUTER JOINの結果から条件に合わない行を除外します。
Q: GROUP BY句がある場合、AVGはどのように計算されますか?
A: GROUP BYでグループ化された各グループごとにAVGが計算されます。今回のように1グループなら全体の平均値です。

関連キーワード: SQL, LEFT OUTER JOIN, AVG関数, 集約関数, NULL処理, GROUP BY, データベース, 売上分析
← 前の問題へ次の問題へ →

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