[SQL]그룹 내 순위 매기는 윈도우 함수

JONGBAO·2024년 7월 25일
0

1. ROW_NUMBER()

각 PARTITION(그룹) 내에서 정렬 기준에 따라 고유한 순위값을 반환하는 함수

  • 기본 문법
ROW_NUMBER() OVER(PARTITION BY [그룹화할 컬럼(선택)] ORDER BY [정렬할 컬럼(필수)]
  • PARTITION BY를 사용하지 않으면 ORDER BY 기준으로 행 번호가 붙음 (RANKS)
ROW_NUMBER() OVER(PARTITION BY  ORDER BY VISIT_CNT)

  • PARTITION BY를 사용하면 명시한 컬럼별로 그룹화되어 순위를 매길 수 있다. (RANKS)
ROW_NUMBER() OVER(PARTITION BY CUST_CNT ORDER BY VISIT_CNT)

2. RANK()

각 PARTITION(그룹) 내에서 정렬 기준에 따라 순위값을 반환하는데, ORDER BY 컬럼이 동일 값이면 같은 순위를 매기고 다음 순위의 값은 이전 순위의 중복된 행 개수만큼 제외하고 순위를 매긴다.

RANK() OVER(PARTITION BY CUST_CNT ORDER BY VISIT_CNT)

  • CUST_NO가 200310900인 경우, VISIT_CNT의 값이 동일한 값(1)이 존재하므로 같은 순위(2)가 반환됨
  • CUST_NO가 2016051700인 경우, VISIT_CNT 가 2인 값이 2개 존재하므로, 다음 순위를 매길 때, 2위 없이 3위로 바로 넘어가는 것을 볼 수 있음

3. DENSE_RANK()

RANK()와 동일하지만, 다음 순위의 값은 이전 순위의 중복된 행 개수와 상관없이 다음 순서로 이어진다.

DENSE_RANK() OVER(PARTITION BY CUST_CNT ORDER BY VISIT_CNT)

  • VISIT_CNT 값이 동일해도 순서대로 순위를 반환하는 것을 알 수 있음

0개의 댓글