본문 바로가기

TOOLS/My SQL

[My SQL] Window 함수 | RANK, DENSE_RANK, ROW_NUMBER / 행에 순위 부여하기

728x90
728x90

안녕하세요. My SQL을 독학하고 있는 꼰정입니다,, 👾

오늘은 행에 순위를 부여해주는 윈도우 함수들을 알아볼게요!

 

먼저 윈도우 함수의 개념을 간단하게 말씀드릴게요.

윈도우 함수는, 행과 행간의 데이터를 비교, 분석, 연산하기 위한 함수입니다.

 

더 간단하게 설명하자면,

셀 = 윈도우 라고 생각하시면 됩니다.

 

네모난 셀이 꼭 창문을 닮지 않았나요? 🪟

순위를 비교, 분석, 연산하는 window 함수 알아볼게요!

 

반응형

 


 

|  순위를 부여하는 window 함수 

RANK, DENSE_RANK, ROW_NUMBER는 대표적으로 행에 순위 부여 시 사용되는 함수입니다.

함수 의미 출력 예시
RANK 동일 순위 적용, 동일 순위 다음 행은 동일 순위의 수 만큼 숫자를 건너뜀 1 , 1 , 3 , 4 , 4 , 6
DENSE_RANK 동일 순위 적용, 동일 순위 다음 행은 순차적으로 표시 1 , 1 , 2 , 3 , 4 , 4 , 5 , 6
ROW_NUMBER 말 그대로, 행의 순서를 출력합니다. 1 , 2 , 3 , 4 , 5 , 6

 

 

쿼리문 작성 시 뼈대는 아래와 같아요.

 

RANK () OVER ( PARTITION BY [컬럼명] ORDER BY [컬럼명] ) 

 

DENSE_RANK () OVER ( PARTITION BY [컬럼명] ORDER BY [컬럼명] )

 

ROW_NUMBER () OVER ( PARTITION BY [컬럼명] ORDER BY [컬럼명] ) 

 

 

그럼 이제 예문을 통해 순위 함수를 살펴보겠습니다.

 

 

 

예시) 

🙌 가장 많이 구매한 고객 및 순위를 확인하고 싶어요. 

- Table: Order_list

- Column: customer_id, price

SELECT customer_id
       , SUM(price)
       , RANK() OVER (ORDER BY price DESC) AS 'RANK'
       , DENSE_RANK() OVER (ORDER BY price DESC) AS 'DENSE_RANK'
       , ROW_NUMBER() OVER (ORDER BY price DESC) AS 'ROW_NUMBER'
FROM order_list ;

 

 

순위 함수를 적용한 데이터들의 결과 값에 차이가 보이시나요!?

 

RANKDENSE_RANK 모두 공동 순위를 인정하지만,

후순위 데이터를 처리하는 방식이 상이한 것을 확인할 수 있습니다.

 

ROW_NUMBER는 행 순서대로 출력되었어요. 

 

만약 고객별 구매 순위를 요청할때에는,

공동순위를 염두에 두고 출력할 것인지 그리고 공동순위 발생 시 후순위 랭크 처리를 어떻게 진행할 것인지 목적을 정하고 적절한 순위 함수를 선택해야겠죠!?

 

 

그럼 다음 포스팅에서 또 다른 예제로 인사드릴게요 - 👩🏻‍💻

 

 

728x90
728x90