令和6年度 秋期 応用情報技術者試験 午前 問30

テクノロジデータベース

この問題は2024(R6)秋 応用情報技術者 午前に出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

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

成績表
図の説明テキスト
学生番号 実施回 得点
S01 1 70
S01 7 80
S02 2 85
S02 5 82
S03 3 83
S03 9 78
S03 12 90
S04 6 100
〔SQL文1〕
図の説明テキスト

〔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〕
図の説明テキスト

〔SQL文2〕
SELECT 学生番号, 実施回, 得点
FROM (SELECT 学生番号, 実施回, 得点, ROW_NUMBER() OVER (a) AS 番号
FROM 成績) R1
WHERE R1.番号 = 1

解答・解説を読む

正解: 選択肢

本問は、SQLのウィンドウ関数(分析関数)における OVER 句内の指定方法に関する問題です。ウィンドウ関数を使用する際、集計や順位付けの対象となる範囲(パーティション)と、その範囲内での並び順を指定する必要があります。

  • PARTITION BY: 指定した列(ここでは「学生番号」)の値ごとにデータをグループ化(分割)します。
  • ORDER BY: グループ化された範囲内で、指定した列(ここでは「実施回」)の順序で並べ替えます。

学生ごとの実施回順の推移などを得るためには、学生番号ごとにグループ化し、その中で実施回の順に並べ替える必要があるため、「PARTITION BY 学生番号 ORDER BY 実施回」が適切です。

各選択肢の解説

  • ア (ORDER BY 学生番号,実施回): PARTITION BY が指定されていないため、表全体のデータに対して「学生番号」と「実施回」で単に並べ替えを行うことになり、学生ごとの独立したグループ化ができません。
  • イ (PARTITION BY 学生番号 ORDER BY 実施回): 正解です。学生番号ごとにデータを分割し、それぞれの分割内で実施回順に並べ替えます。
  • ウ (PARTITION BY 学生番号 ORDER BY 得点 ASC): 学生番号ごとの分割はできていますが、並べ替えの基準が「得点の昇順(低い順)」となっているため、実施回順の推移を追うなどの目的には合致しません。
  • エ (PARTITION BY 学生番号 ORDER BY 得点 DESC): 学生番号ごとの分割はできていますが、並べ替えの基準が「得点の降順(高い順)」となっているため誤りです。