상세 컨텐츠

본문 제목

sql 쿼리에서 순위 dense_rank() 함수 사용하는 방법은?

IT/DB

by JR 2025. 7. 19. 18:07

본문

300x250
반응형

 

 

 

 

 

DENSE_RANK() 함수는 SQL에서 순위를 매길 때 중복 값을 동일 순위로 처리하면서 다음 순위를 건너뛰지 않는 함수입니다.

 

 

예시>

점수: 100 90 90 80 
순위: 1 2 2 3 ← dense_rank()

✅ 사용법

SELECT
  컬럼1,
  컬럼2,
  DENSE_RANK() OVER (ORDER BY 정렬기준컬럼 [ASC|DESC]) AS 순위
FROM
  테이블명;
 
 

📌 예제

예제 테이블: students

id name score
1 Alice 90
2 Bob 95
3 Carol 90
4 David 85
5 Emma 80
 

🎯 점수 기준으로 순위 매기기 (DENSE_RANK() 사용)

 
SELECT
  name,
  score,
  DENSE_RANK() OVER (ORDER BY score DESC) AS rank
FROM
  students;

결과

name score rank
Bob 95 1
Alice 90 2
Carol 90 2
David 85 3
Emma 80 4
 

🔍 DENSE_RANK() vs RANK() vs ROW_NUMBER()


함수 설명
DENSE_RANK() 중복 값은 같은 순위 + 다음 순위 건너뛰지 않음
RANK() 중복 값은 같은 순위 + 다음 순위 건너뜀
ROW_NUMBER() 무조건 순번 부여 (중복 무시)

 

 

 

PARTITION BY는 DENSE_RANK(), RANK(), ROW_NUMBER() 같은 윈도우 함수에서 자주 사용되며, 데이터를 그룹별로 나눠서 순위를 매길 때 사용합니다.


✅ 기본 구조

SELECT
  ...,
  DENSE_RANK() OVER (PARTITION BY 그룹기준컬럼 ORDER BY 정렬기준컬럼 DESC) AS 순위
FROM
  테이블명;

📘 예제: 부서별 직원 성과 순위 매기기

 

📋 테이블: employees

id name department sales
1 Alice HR 200
2 Bob HR 180
3 Carol HR 200
4 David Sales 300
5 Emma Sales 250
6 Frank Sales 300
 

🎯 부서별(department)로 매출(sales) 기준 순위 매기기

SELECT
  name,
  department,
  sales,
  DENSE_RANK() OVER (
    PARTITION BY department
    ORDER BY sales DESC
  ) AS rank_in_department
FROM
  employees;

✅ 결과

name department sale rank_in_department
Alice HR 200 1
Carol HR 200 1
Bob HR 180 2
David Sales 300 1
Frank Sales 300 1
Emma Sales 250 2
 

🔍 정리

구성 요소의미
PARTITION BY 그룹을 나눌 기준 (ex: 부서별, 월별 등)
ORDER BY 그룹 내 정렬 기준 (ex: 점수, 매출 등)
DENSE_RANK() 중복 순위 부여 + 다음 순위 건너뛰지 않음
 

 

 

 

 

 

300x250
반응형

관련글 더보기