Menu
CoddyTech

키별로 하나의 행만 유지하기

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 = 1

PARTITION BY는 “이 키마다 순위를 매긴다”는 뜻이고, ORDER BY는 “최신 항목을 먼저 표시한다”는 뜻입니다. 각 파티션의 1행이 보관하려는 행입니다.

challenge icon

챌린지

중급

사용 가능한 테이블 및 열:

  • readings: sensor_id, recorded_at, value

최소 3개의 측정값이 있는 각 센서에 대해 값이 가장 높은 측정값 하나를 반환하세요. 두 측정값의 value가 같으면 더 최근의 측정값을 선택하세요.

sensor_id, recorded_at, value를 출력하고, sensor_id 순으로 정렬하세요.

직접 해보기

WITH ranked AS (
    -- TODO: 각 측정값과 해당 센서 내 순위(rn)를 선택
    -- 그리고 해당 센서의 측정값 개수(total_readings)
)
SELECT sensor_id, recorded_at, value
FROM ranked
WHERE rn = 1 AND total_readings >= 3
ORDER BY sensor_id
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

심화 과정의 모든 레슨

직접 연습해 보세요: SQL 플레이그라운드