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

平成31年度春期 データベーススペシャリスト 午前Ⅱ 問14

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

問題

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

選択肢

  1. ア
    COUNT
  2. イ
    DISTINCT
  3. ウ
    MAX
  4. エ
    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による補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針