키별로 하나의 행만 유지하기
Coddy SQL 여정의 심화 과정 섹션에 포함된 레슨. 27개 중 26번째.
키(고객, 센서, 제품)가 여러 번 나타나는 테이블이 있고, 그중 가장 최근의 것 또는 점수가 가장 높은 것만 유지하려는 경우가 많습니다.
top-N에서 했던 것과 같은 방식으로 ROW_NUMBER()를 사용한 다음, rn = 1을 유지하세요.
WITH ranked AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY customer_id ORDER BY purchased_at DESC
) AS rn
FROM purchases
)
SELECT * FROM ranked WHERE rn = 1PARTITION BY는 "이 키마다 하나의 순위"를 의미하고, ORDER BY는 "최신순"을 의미합니다. 각 파티션의 1번 행이 유지하려는 행입니다.
챌린지
중급사용 가능한 테이블 및 열:
readings:sensor_id,recorded_at,value
최소 3개의 readings가 있는 각 센서에 대해 해당 센서의 가장 높은 value를 가진 단일 reading을 반환하세요. 두 reading의 value가 같으면 더 최근의 것을 유지하세요.
sensor_id, recorded_at, value를 출력하고, sensor_id로 정렬하세요.
직접 해보기
WITH ranked AS (
-- ROW_NUMBER() OVER (PARTITION BY sensor_id ORDER BY value DESC, recorded_at DESC)
-- COUNT(*) OVER (PARTITION BY sensor_id) 읽기 횟수가 3개 이상인 센서를 필터링하기 위해
)
SELECT sensor_id, recorded_at, value
FROM ranked
WHERE rn = 1 AND total_readings >= 3
ORDER BY sensor_id
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
심화 과정의 모든 레슨
직접 연습해 보세요: SQL 플레이그라운드