データベーススペシャリスト試験 2023年 午前209


“成績”表から、クラスごとに得点の高い順に個人を順位付けした結果を求めるSQL文のaに入る句はどれか。
問題画像
CUME_DIST
MAX
PERCENT_RANK
RANK(正解)

解説

“成績”表からクラスごとに得点の高い順に個人を順位付けした結果を求めるSQL文のaに入る句はどれか【午前2 解説】

要点まとめ

  • 結論:クラスごとに得点の高い順に順位を付けるには「RANK()」関数を使うのが適切です。
  • 根拠:「RANK()」はPARTITION BYでグループ分けし、ORDER BYで並び替えた順位を付与し、同点者は同順位となります。
  • 差がつくポイント:順位付け関数の違いを理解し、順位の付け方(同点の扱い)や集計関数との違いを正確に把握することが重要です。

正解の理由

「RANK()」はウィンドウ関数の一種で、指定したグループ(ここではクラス)ごとに得点の降順で順位を付けます。同点の場合は同じ順位を付け、その後の順位は飛びます。問題の結果表はクラスごとに得点順に順位が付けられており、同点者がいないため順位が連続していますが、同点者がいた場合も正しく順位を付けるのは「RANK()」です。
他の選択肢は順位付けの目的に合わず、例えば「CUME_DIST」は累積分布、「MAX」は集計関数、「PERCENT_RANK」はパーセント順位を返します。

よくある誤解

「RANK()」と似た関数に「DENSE_RANK()」や「ROW_NUMBER()」があり、順位付けの挙動が異なるため混同しやすいです。
また、集計関数の「MAX()」を順位付けに使えると誤解することがありますが、これは誤りです。

解法ステップ

  1. 問題文の結果表から、クラスごとに得点の降順で順位付けされていることを確認する。
  2. SQL文のウィンドウ関数の構文「OVER (PARTITION BY クラス ORDER BY 得点 DESC)」の意味を理解する。
  3. 順位付け関数の候補(RANK, DENSE_RANK, ROW_NUMBER, CUME_DIST, PERCENT_RANKなど)を整理する。
  4. 同点者の扱いや順位の付け方を考慮し、問題の結果に合致する関数を選ぶ。
  5. 「RANK()」が最も適切であると判断し、選択肢から「エ」を選ぶ。

選択肢別の誤答解説

  • ア: CUME_DIST
    累積分布を返す関数で、順位ではなく得点以下の割合を示すため順位付けには不適切です。
  • イ: MAX
    集計関数であり、順位付けには使えません。ウィンドウ関数の文脈でも順位は返しません。
  • ウ: PERCENT_RANK
    パーセント順位を返す関数で、順位の整数値ではなく0〜1の範囲の値を返すため、問題の順位付けには合いません。
  • エ: RANK
    クラスごとに得点の降順で順位を付けるのに最適な関数で、同点者は同順位となり、順位が飛ぶ仕様も含みます。

補足コラム

SQLのウィンドウ関数は集計や順位付けを行う際に非常に便利です。
順位付け関数には主に「RANK()」「DENSE_RANK()」「ROW_NUMBER()」があり、
  • RANK(): 同順位があると順位が飛ぶ
  • DENSE_RANK(): 同順位があっても順位は飛ばない
  • ROW_NUMBER(): 同順位でも連番を付ける
    という違いがあります。問題の要件に応じて使い分けることが重要です。

FAQ

Q: RANK()とDENSE_RANK()の違いは何ですか?
A: RANK()は同順位があると次の順位が飛びますが、DENSE_RANK()は飛ばずに連続した順位を付けます。
Q: MAX()はウィンドウ関数として使えますか?
A: はい、使えますが順位付けには使えず、グループ内の最大値を返す集計関数です。
Q: PERCENT_RANK()はどんな時に使いますか?
A: データの中での相対的な位置を0〜1の範囲で示したい時に使います。順位の整数値ではありません。

関連キーワード: ウィンドウ関数, RANK関数, SQL順位付け, PARTITION BY, ORDER BY, 同順位処理
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ