DBデータベーススペシャリスト試験 午前Ⅱ

令和3年度秋期 データベーススペシャリスト 午前Ⅱ 問10

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

ある電子商取引サイトでは,会員の属性を柔軟に変更できるように,“会員項目”表で管理することにした。“会員項目”表に対し,次の条件でSQL文を実行して結果を得る場合,SQL文のaに入れる字句はどれか。ここで,実線の下線は主キーを,NULLは値がないことを表す。 (1)同一“会員番号”をもつ複数の行によって,1人の会員の属性を表す。 (2)新規に追加する行の行番号は,最後に追加された行の行番号に1を加えた値とする。 (3)同一“会員番号”で同一“項目名”の行が複数ある場合,より大きい行番号の項目値を採用する。
2021年の日付を含む会員項目表,集約後の結果表,及び三つのaを含むSQL文。
2021年の日付を含む会員項目表,集約後の結果表,及び三つのaを含むSQL文。

選択肢

  1. ア
    COUNT
  2. イ
    DISTINCT
  3. ウ
    MAX
  4. エ
    MIN
解き方のヒントを見る

行の優先順位を読むための視点

会員番号と項目名の組合せに重複があるとき、どの行を代表として扱うかを、行番号の付け方や追加順との関係から考える問題です。SQLの構造と、同一属性を区別する手掛かりに注目します。

この問題で問われていること

確認する観点を、同じ会員・同じ項目に属する複数行の中から採用対象を決めるための識別情報と優先順位の関係に絞って整理しましょう。文中の条件同士を対応付け、処理の目的を捉えます。

視点

SQLでは、同じ属性を表す候補行をまとめる単位と、その中で代表を選ぶ基準を分けて捉えます。問題文の行番号が、追加順と候補の比較にどう関わるかを読み取るのが手掛かりです。

確認ポイント

  • 同じ会員番号と項目名を持つ行を、どの単位で比較するか確認する。
  • 行番号が単なる識別子か、追加された順序を表す情報かを見分ける。
  • 重複行から一つを採用する条件と、値がNULLの場合の扱いを分けて考える。
正解と解説を見る

正解

ウ

解説

SQL文は、同じ会員番号と項目名をもつ行をまとめ、その中で最も大きい行番号の行だけを採用してから、項目名ごとの値を会員単位の列に展開している。したがって、aにはMAXを指定する。

理由

内側の副問合せでは、会員番号と項目名ごとに行をグループ化する。条件では、同じ組合せが複数ある場合に、より大きい行番号の項目値を採用すると定めているため、その最大値を求める集約が必要になる。

比較

外側の問合せでは、CASE式によって会員名と最終購入年月日の値を別列へ取り出し、会員番号ごとにまとめている。各CASE式で対象外の行はNULLになるため、対象値を残して一つにまとめる集約にも同じ考え方を使う。

選択肢ア

これは不正解だよ。COUNTはグループ内の行数を数える関数であり、行番号そのものの大小を比較して採用する値を決める処理にはならない。この問題では、重複した項目のうち新しい履歴を識別する必要があるため、件数を求めても条件を満たせない。

選択肢イ

これは不正解だよ。DISTINCTは重複する組合せを取り除くための指定であり、同じ会員番号・項目名の行が複数ある場合に、どの行番号の項目値を採用するかは決めない。値の重複排除だけでは、指定された履歴選択の条件を表せない。

選択肢ウ(正解)

これは正解だよ。MAXはグループ内の最大値を求める関数である。会員番号と項目名でまとめたとき、行番号に適用すれば、同じ項目の中で最も大きい行番号を選べる。これは、より大きい行番号の項目値を採用する条件と一致する。

選択肢エ

これは不正解だよ。MINはグループ内の最小値を求めるため、行番号に適用すると最初に登録された側の行を選ぶことになる。問題の条件は、同じ項目が複数ある場合により大きい行番号を採用するものなので、選択の向きが逆になる。

学習のポイント

GROUP BYと集約関数を組み合わせた最新値の選択を学ぶ。

出典:独立行政法人 情報処理推進機構(IPA)令和3年度秋期 データベーススペシャリスト試験 午前Ⅱ 問10(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針