IPA過去問ドリル

令和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

正解:イ

解説

SQL文1は学生ごとに実施回が最小(初回)のレコードを取得しています。SQL文2でも同じ結果を得るには,ROW_NUMBER()を学生番号ごとに区切り(PARTITION BY 学生番号),実施回の昇順(ORDER BY 実施回)で採番して1番目を取得すればよいので,aには「PARTITION BY 学生番号 ORDER BY 実施回」が入ります。

選択肢ごとの解説

  • 誤り。PARTITION BYを指定しないと学生番号ごとの採番にならず,テーブル全体で通し番号が振られてしまいます。
  • 正しい。学生番号ごとに実施回の昇順で採番すれば,各学生の初回のレコードの番号が1になります。
  • 誤り。得点の昇順で採番すると,各学生の最も得点が低い回のレコードが選ばれてしまい,初回のレコードとは限りません。
  • 誤り。得点の降順で採番すると,各学生の最も得点が高い回のレコードが選ばれてしまい,初回のレコードとは限りません。
応用情報技術者の過去問を演習モードで解く