SQL ROW_NUMBER() 이해: 문법, 사용 예 및 예제
Emily Parker
Product Engineer · Leapcell

Key Takeaways
ROW_NUMBER()
는 파티션 내에서 행에 고유한 순차 번호를 할당합니다.- 순위 매기기, 페이지 매기기 및 중복 감지에 유용합니다.
- 함수에는
ORDER BY
절이 필요합니다.
ROW_NUMBER()
함수는 SQL에서 결과 집합 내의 행에 고유한 순차 정수를 할당하는 강력한 윈도우 함수입니다. 이 함수는 순위 매기기, 페이지 매기기 및 중복 식별과 같은 작업에 특히 유용합니다. 구문, 사용법 및 실제 예제를 자세히 살펴보겠습니다.
구문
ROW_NUMBER() OVER ( [PARTITION BY partition_expression] ORDER BY sort_expression [ASC | DESC] )
ROW_NUMBER()
: 각 행에 순차 정수를 할당하는 함수입니다.OVER
: 함수가 작동하는 창 또는 행 집합을 정의합니다.PARTITION BY
(선택 사항):ROW_NUMBER()
함수가 독립적으로 적용되는 파티션으로 결과 집합을 나눕니다.ORDER BY
: 각 파티션 내에서 행의 순서를 지정합니다.
사용 사례
1. 행에 순차 번호 할당
결과 집합의 각 행에 고유한 번호를 할당하려면:
SELECT ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num, first_name, last_name, salary FROM employees;
이 쿼리는 급여 내림차순으로 각 직원에게 행 번호를 할당합니다.
2. 페이지 매기기
행의 하위 집합을 검색하여 페이지 매기기를 구현합니다.
WITH numbered_employees AS ( SELECT ROW_NUMBER() OVER (ORDER BY employee_id) AS row_num, first_name, last_name FROM employees ) SELECT * FROM numbered_employees WHERE row_num BETWEEN 11 AND 20;
이는 employees
테이블에서 11~20행을 검색합니다.
3. 중복 식별
특정 열을 기준으로 중복 레코드를 찾으려면:
WITH duplicates AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS row_num FROM users ) SELECT * FROM duplicates WHERE row_num > 1;
이렇게 하면 email
필드를 기준으로 중복 사용자가 식별됩니다.
4. 그룹별 상위 N개
각 그룹 내에서 상위 N개 항목을 찾으려면:
WITH ranked_sales AS ( SELECT salesperson_id, region, sales_amount, ROW_NUMBER() OVER (PARTITION BY region ORDER BY sales_amount DESC) AS rank FROM sales ) SELECT * FROM ranked_sales WHERE rank <= 3;
이렇게 하면 판매액을 기준으로 각 지역의 상위 3명의 영업 사원이 검색됩니다.
고려 사항
ORDER BY
절은ROW_NUMBER()
의OVER
절에서 필수입니다.PARTITION BY
를 생략하면 함수는 전체 결과 집합을 단일 파티션으로 처리합니다.RANK()
및DENSE_RANK()
와 달리ROW_NUMBER()
는 순서 지정 열에 동점이 있더라도 간격 없이 고유한 순차 번호를 할당합니다.
결론
ROW_NUMBER()
함수는 SQL에서 행에 순차 번호를 할당하고 순위 매기기, 페이지 매기기 및 중복 감지와 같은 작업을 용이하게 하는 데 사용할 수 있는 다용도 도구입니다. 이 함수를 이해하고 활용하면 복잡한 데이터 분석 및 조작을 쉽게 수행할 수 있습니다.
FAQs
지정된 순서를 기준으로 각 행에 고유한 정수를 할당합니다.
번호를 할당한 다음 행 번호를 사용하여 결과를 필터링합니다.
아니요, 동점과 관계없이 항상 연속 번호를 생성합니다.
백엔드 프로젝트 호스팅을 위한 최고의 선택, Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업, Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하세요.
무제한 프로젝트를 무료로 배포하세요
- 사용량에 따라서만 비용을 지불합니다. 요청이 없으면 요금이 부과되지 않습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼 지불합니다.
- 예: $25로 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 손쉬운 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 지표 및 로깅.
손쉬운 확장성 및 고성능
- 고도의 동시성을 쉽게 처리하도록 자동 확장됩니다.
- 운영 오버헤드가 없어 구축에만 집중할 수 있습니다.
설명서에서 자세히 알아보세요!
X에서 팔로우하세요: @LeapcellHQ