| 学生番号 | 実施回 | 得点 |
|---|---|---|
| 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文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
イ. PARTITION BY 学生番号 ORDER BY 実施回
SQL文1は、学生ごとに実施回が最小(初回)の行を取り出す問合せである。SQL文2はこれをウィンドウ関数 ROW_NUMBER() で書き換えるもので、学生番号ごとにグループ分けし(PARTITION BY 学生番号)、その中で実施回の昇順に並べて(ORDER BY 実施回)連番を振り、番号=1(=各学生で実施回が最小の行)を取り出せば同じ結果になる。よって a には PARTITION BY 学生番号 ORDER BY 実施回 が入り、正解はイである。
応用情報技術者試験 令和6年度秋期 午前 の過去問一覧へ戻る・問30