Contents
내가 작성한 쿼리
개선된 학생을 찾기 위한 솔루션을 작성합니다. 학생이 다음 두 가지 조건을 모두 충족하면 개선된 것으로 간주됩니다:
* 같은 과목에서 최소 두 번의 다른 날짜에 시험을 본 적이 있습니다
* 그 과목의 최신 점수가 첫 번째 점수보다 높습니다
student_id, subject 별로 정렬된 결과 테이블을 오름차순으로 반환합니다.
내가 작성한 쿼리
MySQL, Oracle
-- 학생별, 과목별로 첫 점수와 마지막 점수를 구하기 위한 랭킹 부여 테이블
WITH RankedScores AS (
SELECT
student_id,
subject,
score,
exam_date,
-- 시험 날짜 오름차순: 가장 빠른 시험에 1위 (첫 점수)
RANK() OVER (PARTITION BY student_id, subject ORDER BY exam_date) AS first_rank,
-- 시험 날짜 내림차순: 가장 최근 시험에 1위 (마지막 점수)
RANK() OVER (PARTITION BY student_id, subject ORDER BY exam_date DESC) AS last_rank
FROM Scores
),
-- 첫 점수와 마지막 점수만 추출하는 테이블
FirstLastScores AS (
SELECT
student_id,
subject,
-- 첫 번째 시험 점수 (first_rank = 1인 경우)
MAX(CASE WHEN first_rank = 1 THEN score END) AS first_score,
-- 마지막 시험 점수 (last_rank = 1인 경우)
MAX(CASE WHEN last_rank = 1 THEN score END) AS latest_score,
-- 시험 횟수 (같은 과목을 2번 이상 응시했는지 확인용)
COUNT(*) AS exam_count
FROM RankedScores
GROUP BY student_id, subject
)
SELECT
student_id,
subject,
first_score,
latest_score
FROM FirstLastScores
WHERE latest_score > first_score
ORDER BY
student_id,
subject
Share article