応用情報技術者試験ナビ ロゴ 応用情報技術者試験ナビ
次回試験日:2025年4月20日(あと1日)

応用情報技術者試験 令和6年秋 午前問30 解説付き過去問

問題

"成績"表に対して、SQL文1と同一の結果を得るために、SQL文2のaに入れる字句はどれか。


〔SQL文1〕

SELECT R1.学生番号、R1.実施回、R1.得点 FROM 成績 R1
 INNER JOIN
 (SELECT 学生番号、MIN(実施回) AS 初回 FROM 成績   GROUP BY 学生番号) R2
 ON R1.学生番号=R2.学生番号
 AND R1.実施回=R2.初回

〔SQL文2〕

SELECT 学生番号、実施回、得点
 FROM (SELECT 学生番号、実施回、得点、ROW_NUMBER() OVER(a) AS 番号 FROM 成績) R1
 WHERE R1.番号=1

正解

解説

SQL文1の処理内容を理解するために、まず実行の流れを確認する。
  1. 副問合せ(R2)を作成
    ・ 「成績」表から各学生ごとの最も小さい実施回(初回)を求める。

  2. 成績表(R1)と副問合せ(R2)を結合
    ・ 学生番号と初回の実施回をキーに結合することで、各学生の初回の得点を取得する。

次に、SQL文2の動作を考える。
  1. 「ROW_NUMBER()」 を使用して行番号を付与
    ・ OVER句を使って、各学生ごとに行番号を割り振る。

  2. データのグループ化
    ・「PARTITION BY 学生番号」 を指定することで、各学生ごとにデータを分割する。

  3. 並び順を指定
    ・ ORDER BY句を使い、各学生のデータを「最も早い実施回」順に並べる。
    ・ 実施回の昇順で並べることで、初回のデータが 「ROW_NUMBER() = 1」 になる。

  4. 初回のデータのみ取得
    ・ 「WHERE R1.番号 = 1」 によって、各学生の初回の得点のみを選択する。

したがって、SQL文2のaに入るべき句は、 「PARTITION BY 学生番号 ORDER BY 実施回」となります。