SkillStack
テクノロジ系30 / 80問

応用情報技術者試験 令和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

応用情報技術者試験 令和6年度 秋期 午前 問30の図表

選択肢を押すと答え合わせができます。

正解と解説を見る

【正解】イ

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に質問できる
SkillStackで無料で始める