応用情報技術者試験 応用情報技術者試験 令和6年度秋期 午前30: “成績”表に対して,SQL文1と同一の結果を得るために,SQL文2のaに入れる字句はどれか。 成績 〔SQL文1〕 SELECT R1.学生番号, R1.実施回

応用情報技術者試験 令和6年度秋期 午前
Q 3030 / 80
“成績”表に対して,SQL文1と同一の結果を得るために,SQL文2のaに入れる字句はどれか。 成績
学生番号実施回得点
S01170
S01780
S02285
S02582
S03383
S03978
S031290
S046100
〔SQL文1〕 SELECT R1.学生番号, R1.実施回, R1.得点 FROM 成績 R1 INNER JOIN (SELECT 学生番号, MIN(実施回) AS 初回 FROM 成績 学生番号) R2 ON R1.学生番号 = R2.学生番号 AND R1.実施回 = R2.初回 〔SQL文2〕 SELECT 学生番号, 実施回, 得点 FROM (SELECT 学生番号, 実施回, 得点, ROW_NUMBER() OVER ( a ) AS 番号 FROM 成績) R1 WHERE R1.番号 = 1
この問の正解率:59.72%(653件)

問題本文

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

選択肢

  • .ORDER BY 学生番号, 実施回
  • .PARTITION BY 学生番号 ORDER BY 実施回
  • .PARTITION BY 学生番号 ORDER BY 得点 ASC
  • .PARTITION BY 学生番号 ORDER BY 得点 DESC

正解

. PARTITION BY 学生番号 ORDER BY 実施回

解説

SQL文1は、学生ごとに実施回が最小(初回)の行を取り出す問合せである。SQL文2はこれをウィンドウ関数 ROW_NUMBER() で書き換えるもので、学生番号ごとにグループ分けし(PARTITION BY 学生番号)、その中で実施回の昇順に並べて(ORDER BY 実施回)連番を振り、番号=1(=各学生で実施回が最小の行)を取り出せば同じ結果になる。よって a には PARTITION BY 学生番号 ORDER BY 実施回 が入り、正解はイである。

選択肢ごとの解説

  • .PARTITION BY がないと学生ごとに区切られず表全体で連番が振られてしまい、各学生の初回を取り出せないため誤りである。
  • .学生番号でグループ分けし実施回の昇順で連番を振れば番号=1 が各学生の初回(実施回最小)の行となり、SQL文1と同一の結果になるため正解である。
  • .得点の昇順で並べると番号=1 は各学生の最低得点の行になり、初回(実施回最小)の行とは一致しないため誤りである。
  • .得点の降順で並べると番号=1 は各学生の最高得点の行になり、初回(実施回最小)の行とは一致しないため誤りである。

応用情報技術者試験 令和6年度秋期 午前過去問一覧へ戻る・問30