DBデータベーススペシャリスト試験 午前Ⅱ
令和3年度秋期 データベーススペシャリスト 午前Ⅱ 問10
問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。
問題

選択肢
- アCOUNT
- イDISTINCT
- ウMAX
- エMIN
解き方のヒントを見る
行の優先順位を読むための視点
会員番号と項目名の組合せに重複があるとき、どの行を代表として扱うかを、行番号の付け方や追加順との関係から考える問題です。SQLの構造と、同一属性を区別する手掛かりに注目します。
この問題で問われていること
確認する観点を、同じ会員・同じ項目に属する複数行の中から採用対象を決めるための識別情報と優先順位の関係に絞って整理しましょう。文中の条件同士を対応付け、処理の目的を捉えます。
視点
SQLでは、同じ属性を表す候補行をまとめる単位と、その中で代表を選ぶ基準を分けて捉えます。問題文の行番号が、追加順と候補の比較にどう関わるかを読み取るのが手掛かりです。
確認ポイント
- 同じ会員番号と項目名を持つ行を、どの単位で比較するか確認する。
- 行番号が単なる識別子か、追加された順序を表す情報かを見分ける。
- 重複行から一つを採用する条件と、値がNULLの場合の扱いを分けて考える。
正解と解説を見る
正解
ウ
解説
SQL文は、同じ会員番号と項目名をもつ行をまとめ、その中で最も大きい行番号の行だけを採用してから、項目名ごとの値を会員単位の列に展開している。したがって、aにはMAXを指定する。
理由
内側の副問合せでは、会員番号と項目名ごとに行をグループ化する。条件では、同じ組合せが複数ある場合に、より大きい行番号の項目値を採用すると定めているため、その最大値を求める集約が必要になる。
比較
外側の問合せでは、CASE式によって会員名と最終購入年月日の値を別列へ取り出し、会員番号ごとにまとめている。各CASE式で対象外の行はNULLになるため、対象値を残して一つにまとめる集約にも同じ考え方を使う。
選択肢ア
これは不正解だよ。COUNTはグループ内の行数を数える関数であり、行番号そのものの大小を比較して採用する値を決める処理にはならない。この問題では、重複した項目のうち新しい履歴を識別する必要があるため、件数を求めても条件を満たせない。
選択肢イ
これは不正解だよ。DISTINCTは重複する組合せを取り除くための指定であり、同じ会員番号・項目名の行が複数ある場合に、どの行番号の項目値を採用するかは決めない。値の重複排除だけでは、指定された履歴選択の条件を表せない。
選択肢ウ(正解)
これは正解だよ。MAXはグループ内の最大値を求める関数である。会員番号と項目名でまとめたとき、行番号に適用すれば、同じ項目の中で最も大きい行番号を選べる。これは、より大きい行番号の項目値を採用する条件と一致する。
選択肢エ
これは不正解だよ。MINはグループ内の最小値を求めるため、行番号に適用すると最初に登録された側の行を選ぶことになる。問題の条件は、同じ項目が複数ある場合により大きい行番号を採用するものなので、選択の向きが逆になる。
学習のポイント
GROUP BYと集約関数を組み合わせた最新値の選択を学ぶ。
出典:独立行政法人 情報処理推進機構(IPA)令和3年度秋期 データベーススペシャリスト試験 午前Ⅱ 問10(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針