過去問解きまくり研究所 ホーム

令和6年度 秋期 午前 問30

データベース

SQL文2のaに入れる字句

“成績”表に対して,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 成績
        GROUP BY 学生番号) R2
    ON R1.学生番号 = R2.学生番号
    AND R1.実施回 = R2.初回
〔SQL 文 2〕(a は空欄)
SELECT 学生番号, 実施回, 得点
    FROM (SELECT 学生番号, 実施回, 得点, ROW_NUMBER() OVER ( a ) AS 番号
        FROM 成績) R1
    WHERE R1.番号 = 1
答えと解説を見る

✓ これが正解イPARTITION BY 学生番号 ORDER BY 実施回

解説

学生ごとに区切り実施回の順に番号を振ります。

設問は、成績表に対する二つの SQL 文が同じ結果になるように、空欄に入れる字句を選ばせています。一つ目の文は、学生ごとに実施回の最小値を求め、その値と一致する行だけを取り出しています。二つ目の文は ROW_NUMBER で各行に番号を振り、番号が 1 の行だけを残す形です。ここから、空欄に必要な条件は二つに分かれます。番号を振り直す単位を学生ごとにすること、そして実施回の小さいほうから順に並べることです。前者を担うのが PARTITION BY で、ここに学生番号を指定します。後者は並べ替えの指定で、実施回を挙げれば、向きを省いたときの既定である昇順になります。正解は、学生番号で区切って実施回の順に並べる字句です。この二つがそろうと、各学生の最初の実施回の行に番号 1 が付き、一つ目の文と同じ行がそろいます。

ほかの選択肢はなぜ違うのか

出典:令和6年度 秋期 応用情報技術者試験 午前 問30

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)