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

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

成績
図の説明テキスト

成績

氏名 クラス 得点
情報太郎 A 80
情報次郎 A 63
情報花子 B 70
情報桜子 B 92
情報三郎 A 78
結果
図の説明テキスト

〔結果〕

氏名 クラス 得点 順位
情報太郎 A 80 1
情報三郎 A 78 2
情報次郎 A 63 3
情報桜子 B 92 1
情報花子 B 70 2
SQL文
図の説明テキスト

〔SQL文〕

SELECT 氏名, クラス, 得点,
a () OVER (PARTITION BY クラス ORDER BY 得点 DESC) 順位
FROM 成績

解答・解説

正解: エ. RANK

クラスごとに得点の高い順に個人を順位付けするためには、SQLのウィンドウ関数である RANK を使用します。

OVER 句内で PARTITION BY クラス とすることでクラスごとのグループに分割し、ORDER BY 得点 DESC と指定することで得点の高い順(降順)に順位を付けることができます。

各選択肢の解説

  • ア (CUME_DIST): 誤り。値の累積分布(相対的な位置)を0から1の範囲で計算する関数であり、順位付けではありません。

  • イ (MAX): 誤り。指定された列の最大値を求める集約関数であり、個人の順位付けには使用できません。

  • ウ (PERCENT_RANK): 誤り。相対的な順位(パーセンタイル)を0から1の範囲で計算する関数であり、通常の順位付けには適していません。

  • エ (RANK): 正解。指定された順序に基づいて順位を割り当てる関数です。同順位がある場合は同じ順位を割り当て、次の順位をスキップします。

Spineチーム