データベーススペシャリスト試験 2021年 午前210


ある電子商取引サイトでは会員の属性を柔軟に変更できるように“会員項目”表で管理することにした。“会員項目”表に対し次の条件でSQL文を実行して結果を得る場合SQL文のaに入れる字句はどれか。ここで、実線の下線は主キーを、NULLは値がないことを表す。
〔条件〕 (1)同一“会員番号”をもつ複数の行によって、1人の会員の属性を表す。 (2)新規に追加する行の行番号は、最後に追加された行の行番号に1を加えた値とする。 (3)同一“会員番号”で同一“項目名”の行が複数ある場合、より大きい行番号の項目値を採用する。
問題画像
COUNT
DISTINCT
MAX(正解)
MIN

解説

会員項目表の最新属性抽出SQL文の字句選択【午前2 解説】

要点まとめ

  • 結論:最新の行番号を取得するために、サブクエリの行番号抽出部分には「MAX」を使うのが正解です。
  • 根拠:同一会員番号・項目名で複数行ある場合、行番号が最大の行の項目値を採用する条件に合致します。
  • 差がつくポイント:GROUP BYで最大値を取る意図を理解し、COUNTやDISTINCTではなく集約関数MAXを選ぶことが重要です。

正解の理由

問題の条件(3)により、同一会員番号かつ同一項目名の複数行がある場合は、行番号が最も大きい行の項目値を採用します。
このため、サブクエリで「GROUP BY 会員番号, 項目名」したうえで、行番号の最大値を抽出する必要があります。
選択肢の中で「MAX」は最大値を取得する集約関数であり、これが正しい字句です。

よくある誤解

COUNTは件数を数える関数であり、最大値を取得できません。DISTINCTは重複排除であり、集約関数ではありません。MINは最小値を取得するため条件に合いません。

解法ステップ

  1. 問題文の条件を整理し、最新の属性値を取得するためには「行番号の最大値」を使うことを理解する。
  2. サブクエリで「会員番号」と「項目名」でグループ化し、各グループの最大行番号を抽出する必要があると判断する。
  3. 集約関数の中から最大値を取得する「MAX」を選択肢から選ぶ。
  4. SQL文に「MAX(行番号)」を入れて実行結果を確認し、条件通りの結果になることを確認する。

選択肢別の誤答解説

  • ア: COUNT
    行番号の数を数えるだけで、最新の行番号を取得できず誤り。
  • イ: DISTINCT
    重複排除のためのキーワードであり、集約関数ではないため不適切。
  • ウ: MAX
    最大の行番号を取得し、最新の属性値を抽出するため正解。
  • エ: MIN
    最小の行番号を取得するため、最新の行番号を求める条件に合わない。

補足コラム

SQLで最新のレコードを抽出する際は、グループ化と集約関数の組み合わせがよく使われます。
今回のように複数の属性を持つ場合は、サブクエリで最新の行番号を特定し、その行の値を取得する方法が効率的です。
また、CASE文を使って属性ごとに列を分けるテクニックも重要なSQLスキルです。

FAQ

Q: なぜMAXでなくMINを使ってはいけないのですか?
A: MINは最小値を取得するため、最新の行番号(最大値)を取得する条件に合いません。
Q: COUNTやDISTINCTはどんな場合に使いますか?
A: COUNTは件数を数えるとき、DISTINCTは重複を除外してユニークな値を取得するときに使います。

関連キーワード: SQL, 集約関数, MAX関数, グループ化, CASE文, 属性管理, 最新レコード抽出
← 前の問題へ次の問題へ →

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