SkillStack
テクノロジ系9 / 25問

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

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

〔SQL文〕  SELECT 氏名、クラス、得点、    「a」() OVER (PARTITION BY クラス ORDER BY 得点 DESC) 順位    FROM 成績

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

選択肢を押すと答え合わせができます。

正解と解説を見る

【正解】エ

RANKは、指定した区分ごとに、並べ替えた順序に基づく順位を返すウィンドウ関数です。PARTITION BY クラスによってAとBを別々のグループにし、ORDER BY 得点 DESCによって得点の高い順に並べます。画像の値を追うと、Aでは80点が1位、78点が2位、63点が3位となり、Bでは92点が1位、70点が2位となります。クラスが変わると順位は1から振り直されるため、提示された結果と一致します。

アのCUME_DISTは誤りです。これは現在行以下までに含まれる行の割合を返す累積分布関数です。Aでは上から1÷3、2÷3、3÷3、Bでは1÷2、2÷2となり、1、2、3という順位そのものにはなりません。

イのMAXは誤りです。これは最大値を求める集約関数です。MAXには通常、MAX(得点)のように対象列が必要であり、MAX()では構文としても適切ではありません。得点を指定してもクラス内の最高得点を返すだけで、各人の順位にはなりません。

ウのPERCENT_RANKは誤りです。これは「(順位-1)÷(グループの行数-1)」で相対順位を0から1の範囲で返します。Aなら0、0.5、1、Bなら0、1となるため、求める整数順位とは異なります。

【ポイント】 ・RANKは同点を同順位にし、その次の順位を飛ばします。 ・順位を飛ばしたくない場合はDENSE_RANK、単純な連番にはROW_NUMBERを使います。

出典:令和5年度 秋期 データベーススペシャリスト試験 午前II 問9
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。

この回の25問を、アプリで通しで解く

  • 本番と同じ問題数・制限時間で通し演習(模試モード)
  • 間違えた問題は自動で「復習すべき問題」に回る
  • 解説で分からない点はAIに質問できる
SkillStackで無料で始める