[윈도우 함수]ROW_NUMBER()함수

2025. 8. 1. 12:40·코딩 테스트/02. SQL

1. ROW_NUMBER()이란?

ROW_NUMBER은  정해준 기준대로 순서를 매겨주는 함수입니다.

여기서  그룹별로 순서를 매길 수 있어요.

즉, 지정한 그룹안에서 지정한 순서(ORDER BY)에 따라 각 행에 고유한 순위를 부여하는 거죠.

 

2. 구문 형태

ROW_NUMBER() OVER (
    PARTITION BY 그룹컬럼 
    ORDER BY 정렬기준컬럼 DESC/ASC)

 

PARTITION BY 그룹 나누는 기준 (생략 가능)
ORDER BY 그룹 내에서 어떤 순서로 순위를 매길지 정함
ROW_NUMBER() 각 행에 1, 2, 3, ... 순위를 부여

 

그럼 여기서 의문이 떠오를실겁니다.

만약 동점이라서 순위가 같을 때는 둘다 같은 순위인건가?

만약 둘다 3순위면 그 다음 순위는 4순위인가 5순위인가?

 

이런 조건들을 구분해서 사용하는 함수도 존재합니다!

3. ROW_NUMBER vs RANK vs DENSE_RANK

함수 순위 중복 여부 다음 순위 건너뜀 예시(동점자 존재 시)
ROW_NUMBER() ❌ 순위 중복 없음 ✅ 건너뜀 없음 (무조건 1,2,3...) 1,2,3,4...
RANK() ✅ 동점 순위 같음 ✅ 다음 순위 건너뜀 1,2,2,4...
DENSE_RANK() ✅ 동점 순위 같음 ❌ 건너뜀 없음 1,2,2,3...
 

ROW_NUMBER()는 무조건 고유한 번호를 매긴다는 것!

4. ROW_NUMBER() 는 동점일 때 순위를 어떻게 정할까? 

바로  ORDER BY 절 뒤에 있는 컬럼들을 순서대로 보고 판단합니다. 
그래서 명시를 하지 않으면 임의 기준으로 순위가 정해지므로 예측 불가하게 될 수 있습니다!!
예를 들어 PRICE가 같다면 PRODUCT_NAME의 알파벳 분서대로 순위를 매긴다고 ORDER BY에 기준을 두는거죠.

ROW_NUMBER()는 무조건 고유한 번호를 매긴다는 것!

 

5. PARTITION BY를 생략하면?

전체 테이블을 하나의 그룹으로 보고 순위를 매기게 됩니다.

  • PARTITION BY가 있으면 -> 그룹별로 순위
ROW_NUMBER() OVER (ORDER BY ~)
  • PARTITION BY가 없으면 -> 전체 데이터를 하나의 그룹으로 보고 순위
ROW_NUMBER() OVER (PARTITION BY A ORDER BY B)

 

'코딩 테스트 > 02. SQL' 카테고리의 다른 글

[프로그래머스]SQL쿼리테스트 Lv4(2)  (2) 2025.08.03
[프로그래머스]SQL 쿼리테스트 Lv4(1)  (1) 2025.08.01
[프로그래머스]SQL 쿼리테스트 Lv3(3)  (6) 2025.07.30
[프로그래머스] SQL 쿼리테스트 Lv3(2)  (2) 2025.07.29
[프로그래머스]SQL 쿼리테스트 Lv3(1)  (5) 2025.07.28
'코딩 테스트/02. SQL' 카테고리의 다른 글
  • [프로그래머스]SQL쿼리테스트 Lv4(2)
  • [프로그래머스]SQL 쿼리테스트 Lv4(1)
  • [프로그래머스]SQL 쿼리테스트 Lv3(3)
  • [프로그래머스] SQL 쿼리테스트 Lv3(2)
Growth DA Log
Growth DA Log
Growth DA Log 님의 블로그 입니다.
  • Growth DA Log
    Growth DA Log님의 블로그
    Growth DA Log
  • 전체
    오늘
    어제
    • 분류 전체보기 (125)
      • TIS_COMPANY (6)
      • 코딩 테스트 (61)
        • 01. Python (3)
        • 02. SQL (58)
      • 데이터 분석 (53)
        • 01. BigQuery (9)
        • 02. GA4 (1)
        • 02-1. GA4를 더 잘 다루기 위한 마케팅 개.. (5)
        • 03. streamlit (5)
        • 04. Git (12)
        • 05. 데이터 엔지니어링 (3)
        • 06. 데이터 모델링 (11)
        • 07. Excel (0)
        • 08. Tableau (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    revert
    streamlit
    rank
    tableau
    tableaubootcamp
    solvesql
    DENSE_RANK
    cross_join
    코드잇스프린트후기
    Reset
    코테
    SQL
    이행성
    AARRR
    git
    프로그래머스
    코딩테스트
    윈도우함수
    ROW_NUMBER
    쿼리테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Growth DA Log
[윈도우 함수]ROW_NUMBER()함수
상단으로

티스토리툴바