応用情報技術者試験 令和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は、学生番号ごとにMIN関数で最小の実施回を求め、その実施回に対応する成績を結合によって取り出しています。SQL文2で同じ結果を得るには、学生番号ごとに行をグループ分けし、実施回の昇順に番号を付ける必要があります。したがって、「PARTITION BY 学生番号 ORDER BY 実施回」とするイが正解です。
実際に番号を付けると、S01は実施回1が番号1、実施回7が番号2です。S02は実施回2が番号1、5が番号2、S03は実施回3、9、12が順に番号1、2、3、S04は実施回6が番号1です。番号1だけを抽出すると、得点は順に70、85、83、100となり、SQL文1と一致します。
アは誤りです。学生番号ごとの区切りがないため、表全体で連続した行番号が付き、番号1の行は全体で一つだけになります。
ウは誤りです。学生ごとに得点の低い順で番号を付けるので、最初の実施回ではなく最低得点の行を選びます。
エは誤りです。学生ごとに得点の高い順で番号を付けるので、最高得点の行を選びます。
【ポイント】 PARTITION BYは行番号を付け直すグループを指定し、ORDER BYはそのグループ内の順序を指定します。 ROW_NUMBER関数で「グループごとの先頭行」を求める問題では、何を単位に分割し、何を基準に先頭とするかを確認します。
出典:令和6年度 秋期 応用情報技術者試験 午前 問30
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。
この回の80問を、アプリで通しで解く
- 本番と同じ問題数・制限時間で通し演習(模試モード)
- 間違えた問題は自動で「復習すべき問題」に回る
- 解説で分からない点はAIに質問できる