“成績”表に対して,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〕 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

テクノロジ系・一部改変

ア ORDER BY 学生番号, 実施回

なぜ違う: PARTITION が無いと全体で通し番号になり、各学生の初回だけを選べない。

イ PARTITION BY 学生番号 ORDER BY 実施回
ウ PARTITION BY 学生番号 ORDER BY 得点 ASC

なぜ違う: 得点の昇順で1番になり、実施回が最小(初回)の行とは限らない。

エ PARTITION BY 学生番号 ORDER BY 得点 DESC

なぜ違う: 得点が最高の行を選ぶことになり、初回の行ではない。

正解: イ

要点: 学生ごと(PARTITION BY 学生番号)に実施回の昇順で1番=初回。

SQL文1は学生ごとに最小の実施回(初回)の行を取り出す。これを ROW_NUMBER() で再現するには、学生番号で区切り(PARTITION BY 学生番号)、実施回の昇順(ORDER BY 実施回)で採番し、番号=1(各学生の実施回が最小の行)を選ぶ。得点で並べると初回の行にならない。

関連キーワード: SQL・ウィンドウ関数・ROW_NUMBER

同じ回の前後の問題

テクノロジ系の他の問題

アプリで弱点分析つきの演習ができます

App Store

応用情報技術者の学習アプリ(応用情報トレ)

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