令和6年度 秋期 応用情報技術者試験 午前 問30
テクノロジ/データベース“成績”表に対して,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
出典:令和6年度 秋期 応用情報技術者試験 午前 問30
- アORDER BY 学生番号, 実施回
- イPARTITION BY 学生番号 ORDER BY 実施回
- ウPARTITION BY 学生番号 ORDER BY 得点 ASC
- エPARTITION BY 学生番号 ORDER BY 得点 DESC
正解:イ
解説
SQL文1は学生ごとに実施回が最小(初回)のレコードを取得しています。SQL文2でも同じ結果を得るには,ROW_NUMBER()を学生番号ごとに区切り(PARTITION BY 学生番号),実施回の昇順(ORDER BY 実施回)で採番して1番目を取得すればよいので,aには「PARTITION BY 学生番号 ORDER BY 実施回」が入ります。
選択肢ごとの解説
- ア誤り。PARTITION BYを指定しないと学生番号ごとの採番にならず,テーブル全体で通し番号が振られてしまいます。
- イ正しい。学生番号ごとに実施回の昇順で採番すれば,各学生の初回のレコードの番号が1になります。
- ウ誤り。得点の昇順で採番すると,各学生の最も得点が低い回のレコードが選ばれてしまい,初回のレコードとは限りません。
- エ誤り。得点の降順で採番すると,各学生の最も得点が高い回のレコードが選ばれてしまい,初回のレコードとは限りません。