データベーススペシャリスト試験 2014年 午前216


“商品月間販売実績” 表に対して, SQL文を実行して得られる結果はどれか。
問題画像選択肢画像
(正解)

解説

商品月間販売実績 表に対するSQL文の結果はどれか【午前2 解説】

要点まとめ

  • 結論:SQL文は「総販売数が上位3位以内の商品」を抽出し、結果は選択肢ウです。
  • 根拠:サブクエリで「総販売数が自分より多い行数」を数え、その数が3未満(つまり上位3位以内)を条件にしています。
  • 差がつくポイント:順位付けのロジック理解と、同率順位の扱いを正確に把握することが重要です。

正解の理由

SQL文のサブクエリは、対象行Aの総販売数より大きい総販売数を持つ行の数をカウントします。この数が3未満であれば、Aの総販売数は上位3位以内に入ることを意味します。
表の総販売数を降順に並べると、500(S006)、400(S004、S005)、250(S002)、150(S001、S003)、60(S007)となり、上位3位は500、400、400です。よって、商品コードS006、S004、S005が該当し、選択肢ウが正解です。

よくある誤解

「3 > COUNT(*)」の意味を「3以下」と誤解しがちですが、実際は「3より小さい」、つまり「0,1,2」のみが条件です。
また、同じ総販売数の複数行がある場合の順位付けを理解していないと誤答しやすいです。

解法ステップ

  1. SQL文のサブクエリの意味を理解する:「Aの総販売数より大きい総販売数の行数を数える」
  2. その数が3未満である行を抽出する条件を確認する
  3. 表の総販売数を降順に並べ、順位をつける(同率順位も考慮)
  4. 上位3位以内に該当する商品コードを特定する
  5. 選択肢の表と照合し、該当するものを選ぶ

選択肢別の誤答解説

  • ア:150の総販売数の商品(S001、S003)と500(S006)が含まれていますが、150は上位3位以内ではありません。
  • イ:150(S001、S003)と50(S007)が含まれていますが、50は最下位であり条件に合いません。
  • ウ:500(S006)、400(S004、S005)で上位3位以内の総販売数を正しく抽出しています。
  • エ:400(S004、S005)と50(S007)が含まれていますが、50は条件外です。

補足コラム

SQLで順位を求める方法は複数ありますが、今回のようにサブクエリで「自分より大きい値の数」を数える方法は、順位付けの基本的なテクニックです。
また、同率順位の扱いは「順位の飛び方」によって変わるため、問題文の条件をよく確認しましょう。

FAQ

Q: 「3 > COUNT()」は「3以下」と同じですか?
A: いいえ、「3 > COUNT(
)」は「COUNT(*)が3より小さい」、つまり0,1,2の値を指します。
Q: 同じ総販売数が複数ある場合、順位はどうなりますか?
A: 同じ値は同じ順位となり、その分順位が飛びます。今回の問題では同率2位が2つあります。

関連キーワード: SQL, サブクエリ, 順位付け, 集計関数, WHERE句, 同率順位, 販売実績分析
← 前の問題へ次の問題へ →

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