令和3年度 秋期 データベーススペシャリスト試験 午前II 問10
2025年6月30日
【問題10】
ある電子商取引サイトでは、会員の属性を柔軟に変更できるように、"会員項目"表で管理することにした。"会員項目"表に対し、次の条件でSQL文を実行して結果を得る場合、SQL文のaに入れる字句はどれか。ここで、実線の下線は主キーを、NULLは値がないことを表す。
〔条件〕
(1) 同一"会員番号"をもつ複数の行によって、1人の会員の属性を表す。
(2) 新規に追加する行の行番号は、最後に追加された行の行番号に 1 を加えた値とする。
(3) 同一"会員番号"で同一"項目名"の行が複数ある場合、より大きい行番号の項目値を採用する。
【解説】
#### 条件解釈
各「会員番号」と「項目名」に対して、行番号が最大のレコードが結果に含まれる必要があります。
つまり、SQL 文のサブクエリ部分では、GROUP BY を使用して「会員番号」と「項目名」でグループ化し、最大の行番号を選択する必要があります。
#### SQL 文の構造
サブクエリ部分では、各「会員番号」と「項目名」について最大の行番号を取得するため、MAX を使用します。
その結果を基に、外部クエリで必要な情報(会員名、最終購入年月日)を抽出します。
#### 選択肢の確認
1. COUNT
COUNT は行数をカウントする関数であり、最大値を取得する用途には適しません。
2. DISTINCT
DISTINCT は重複を除去するために使用されますが、条件を満たす特定の値(最大値)を取得する用途には適しません。
3. MAX
MAX はグループ内での最大値を取得する関数であり、「行番号が最大のレコードを取得する」という条件に適合します。
4. MIN
MIN はグループ内での最小値を取得する関数であり、今回の条件(最大の行番号)には適しません。
#### 正解
サブクエリで「会員番号」と「項目名」ごとに最大の行番号を取得する必要があるため、a には MAX が入ります。
出典:令和3年度 秋期 データベーススペシャリスト試験 午前II 問10