アラフィフオヤジ
令和5年度 秋期 データベーススペシャリスト試験 午前Ⅱ試験 問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文〕
SELECT 氏名, クラス, 得点,
a () OVER (PARTITION BY クラス ORDER BY 得点 DESC) 順位
FROM 成績
ア CUME_DIST
イ MAX
ウ PERCENT_RANK
エ RANK
解説
アラフィフオヤジ
このSQL文でクラスごとに得点の高い順に個人を順位付けするためには、a
にはRANK
を使用します。したがって、正解は「エ」です。以下のようになります。
SELECT 氏名, クラス, 得点,
RANK() OVER (PARTITION BY クラス ORDER BY 得点 DESC) 順位
FROM 成績
このSQL文は、各クラスで得点が高い順に学生を順位付けします。RANK()
関数は、同じ得点を持つ学生には同じ順位を付け、次の得点はその数だけ順位が下がります。例えば、1位が2人いた場合、次の得点は3位になります。これはスポーツ競技などでよく見られる順位付けの方法です。他の選択肢(CUME_DIST
、MAX
、PERCENT_RANK
)はこの問題には適していません。それぞれ異なる目的と計算方法を持っています。例えば、MAX
は集合内の最大値を返し、CUME_DIST
とPERCENT_RANK
は値の相対的な位置を計算します。これらは順位付けには使用されません。したがって、この問題に対する最適な解答は「エ」のRANK
です。