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

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

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

問題

“成績”表から,クラスごとに得点の高い順に個人を順位付けした結果を求めるSQL文の,aに入れる字句はどれか。
氏名,クラス及び得点をもつ成績表,クラスごとの順位を付けた結果,並びにウィンドウ関数名を空欄aとしたSQL文。
氏名,クラス及び得点をもつ成績表,クラスごとの順位を付けた結果,並びにウィンドウ関数名を空欄aとしたSQL文。

選択肢

  1. ア
    CUME_DIST
  2. イ
    MAX
  3. ウ
    PERCENT_RANK
  4. エ
    RANK
解き方のヒントを見る

抽出条件と結果を対応づける視点

SQLの抽出問題では、条件の読み取り、対象となる行の範囲、結果に現れる項目の関係を順に整理し、各段階で何が変化するかを確認すると、選択肢の表面的な印象に流されにくくなります。

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

一つの確認に絞り、指定された条件がデータのどの範囲を対象にし、その対象が結果としてどのように表現されるかを、問題文の記述と照合して考えてください。

視点

条件が適用される対象と、抽出後に表示・集約・並べ替えなどで生じる結果の関係を分けて整理しましょう。まず対象範囲を捉え、その後に結果の形を確認すると、処理の段階を混同しにくくなります。

確認ポイント

  • 条件が対象とするデータの範囲を確認する
  • 結果に現れる項目と対象範囲の対応を確認する
  • 抽出後に結果の形へ影響する指定を確認する
正解と解説を見る

正解

エ

解説

クラスごとに得点の降順で整数順位を付けるには、順位を返すウィンドウ関数を使用する。RANK()はPARTITION BYで分けた各クラス内に順位を付与でき、結果表と一致する。

理由

aにはRANKを指定する。SQL文はRANK() OVER (PARTITION BY クラス ORDER BY 得点 DESC)となり、クラスごとに得点の高い順で1位、2位、3位を返す。A組は80点、78点、63点の順、B組は92点、70点の順となり、公式画像の結果表と一致する。

比較

CUME_DISTとPERCENT_RANKは順位そのものではなく累積分布や相対的な順位を割合で返す。MAXは各行の順位ではなく最大値を求める集約関数です。したがって、整数の順位列を作る目的にはRANKが適切です。

選択肢ア

これは不正解だよ。CUME_DISTは並べ替えた順序における現在行までの累積行数を、パーティションの総行数で割った値を返す。得点を降順にすると、現在行以上の得点を持つ行の割合に相当し、結果表の1、2、3という順位そのものにはならない。

選択肢イ

これは不正解だよ。MAXは指定範囲の最大値を求める関数であり、各個人がクラス内で何位かを返す関数ではない。本問では得点の最大値ではなく、クラスごとの得点順に整数の順位を表示する必要があるため、目的と一致しない。

選択肢ウ

これは不正解だよ。PERCENT_RANKはパーティション内での相対的な順位を割合として返す関数で、通常は0から1までの値になる。公式画像が示す1位、2位、3位という整数順位を直接返す処理ではないため、aには適さない。

選択肢エ(正解)

これは正解だよ。RANK() OVER (PARTITION BY クラス ORDER BY 得点 DESC)は、クラスごとに分けた上で得点の高い順に順位を付ける。A組では80、78、63点が1、2、3位、B組では92、70点が1、2位となり、結果表と一致する。

学習のポイント

OVER句における分割、並べ替え、順位関数の役割を区別する。

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

関連する過去問一覧

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