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

選択肢
- アCOUNT
- イDISTINCT
- ウMAX
- エMIN
解き方のヒントを見る
SQL抽出条件を読む視点
SQLの抽出条件と結果を対応づけるときは、条件がどの行に適用され、各行の値が判定にどう関わるかという一つの視点に集中し、処理の順序や比較対象を落ち着いて整理しましょう。
この問題で問われていること
画面のSQLと結果候補を見比べる際は、条件式を暗記せず、対象となる行ごとに必要な値と判定材料を確認し、条件が結果に及ぼす範囲を整理することに注目してください。
視点
抽出結果を考えるときは、まず条件が参照する列・値・行の関係を整理し、各行を同じ観点で確認します。条件の一部だけで全体を判断せず、候補ごとの対応を丁寧に見比べることが大切です。
確認ポイント
- 条件が参照している列と、結果候補が表している対象を対応づける
- 行ごとに判定に必要な値を見落としていないか確認する
- 条件全体と結果候補の対応を一度まとめて見直す
正解と解説を見る
正解
ウ
解説
正しい字句はMAXです。会員番号と項目名ごとに行番号をグループ化し、その中で最大の行番号を持つ行だけを抽出することで、同じ属性が複数登録されている場合も最新の項目値を採用できる。
理由
副問合せでは会員番号と項目名ごとに行をまとめ、各グループの行番号の最大値を求める。新しい行ほど行番号が大きいという条件なので、その行番号に一致する行を外側の問合せで取り出せば、最新の項目値になる。
結果との比較
外側の問合せではCASE式によって会員名と最終購入年月日を別の列に分け、会員番号ごとに集約している。0112では行番号5の2019-02-01が行番号4の2019-01-30より新しいため、結果には2019-02-01が表示される。0113は該当する購入年月日の行がないためNULLになる。
選択肢ア
これは不正解だよ。COUNTはグループ内の行数を数える集約関数であり、最大の行番号そのものを返さない。同じ会員番号・項目名の行が1行か2行かは判定できても、0112で行番号5の項目値を選ぶ条件には対応できない。
選択肢イ
これは不正解だよ。DISTINCTは重複する値や行を重ねて出力しないための指定であり、複数行のうち行番号が大きいものを選択する処理ではない。異なる購入年月日の重複を除けても、最新の行を特定する根拠にはならない。
選択肢ウ(正解)
これは正解だよ。MAXはグループ内の行番号から最大値を求めるため、同じ会員番号・項目名について最後に追加された行を特定できる。抽出された行の項目値をCASE式で列化することで、0112には2019-02-01が表示される。
選択肢エ
これは不正解だよ。MINはグループ内の行番号から最小値を求めるため、最初に追加された行を選ぶことになる。0112では行番号4の2019-01-30が対象となり、条件で指定された、より大きい行番号の項目値を採用する結果と一致しない。
学習のポイント
GROUP BYと集約関数を、最新行の選択に対応付けて理解する。
出典:独立行政法人 情報処理推進機構(IPA)平成31年度春期 データベーススペシャリスト試験 午前Ⅱ 問14(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針