Coding Diary.

(SQL) 순위 윈도우(Window) 함수 Row_number, Rank, Dense rank 개념 및 구문 예시 본문

Coding/SQL

(SQL) 순위 윈도우(Window) 함수 Row_number, Rank, Dense rank 개념 및 구문 예시

life-of-nomad 2024. 6. 3. 10:49
728x90
반응형
지난 글에서 설명드린 여러 가지 Window 함수 중 순위를 지정하는 함수인 ROW_NUMBER, RANK, DENSE_RANK에 대해 자세히 알아보겠습니다.

 

🔻(참고)Window함수 종류🔻

 

(SQL) 윈도우 함수 (Window Fuction) 개념 및 종류

이번 글에서는 다음 두 가지 경우에서 유용한 함수인 윈도우 함수에 대해 알아보겠습니다.1) 데이터의 행 또는 레코드에 대한 추세 또는 변화를 측정하려는 경우2) 활동 또는 우선순위에 대해 열

life-of-nomad.tistory.com

🔻(참고)PARTITION BY, OVER함수🔻

 

1. ROW_NUMBER()

  • 동일한 값이 존재해도 각 행에 고유의 순위가 부여됩니다.
  • 1) 사용하고자 하는 순위 윈도우 함수를 가장 먼저 입력(ROW_NUMBER)
  • 2) ROW_NUMBER 절 뒤에는 반드시 OVER 입력
  • 3) 순위를 매길 기준이 될 열 지정

출처 ❘ Udacity

  • 결과를 보면 위에서부터 네 개의 행의 date_time 값이 모두 동일합니다.
  • 그럼에도 각 열에는 임의로 부여한 고유의 순위가 매겨집니다. 

 

2. RANK()

  • 동일한 값들이 존재할 경우 해당 값들에 모두 같은 순위를 매기며 동일한 값들의 개수만큼 순위를 건너뛴 후에 다시 순위를 매기기 시작합니다.
  • 구문은 ROW_NUMBER()과 동일합니다.

출처 ❘ Udacity

  • 결과를 보면 같은 값을 갖는 행들에 동일한 순위가 부여되고 그 다음 순위가 1에서 5로 건너뜁니다.

 

3. DENSE_RANK()

  • RANK와 같은 방식으로 동일한 값들을 처리합니다. 따라서 열에 존재하는 동일한 값들에 모두 같은 순위를 부여합니다.
  • 하지만 그 값들과 다른 값이 나타나는 지점부터 바로 그 다음의 순위를 부여합니다.
  • 구문은 ROW_NUMBER 및 RANK와 동일합니다.

출처 ❘ Udacity

  • 결과를 보면 2017년 2월 1일에 2라는 순위가 부여되었습니다.

 

4. 예시

문제) orders 테이블에서 id, account_id  total 변수를 선택한 후 파티션을 사용해 각 계정에 대해 주문된 총 용지 양(가장 높은 것부터 낮은 것까지)의 순위를 매기는 total_rank라는 열을 만듭니다. 최종 테이블에는 이 네 개의 열이 있어야 합니다.

SELECT id, account_id, total, 
	RANK() OVER (PARTITION BY account_id ORDER BY total DESC) AS total_rank
FROM orders

 

728x90
반응형