1. RANK() OVER()
RANK() OVER()는 윈도우 함수로, 각 행에 대해 순위를 매기고 그 결과를 반환한다. 주로 OVER(PARTITION BY ...) 구문과 함께 사용하며, 특정 그룹 내에서 순위를 구할 수 있다.
SELECT
DNAME,
NAME,
SAL,
RANK() OVER(PARTITION BY DNAME ORDER BY SAL DESC) AS rank
FROM employees;
DNAME별로 데이터를 그룹화고, 각 그룹 내에서 SAL을 내림차순 정렬하여 순위를 매긴다.
RANK() 함수는 동일한 값에 동일한 순위를 부여하고, 다음 순위는 건너뛴다. ex) 1위가 2명이면 다음은 2위가 아닌 3위.
순위를 건너뛰지 않고 이어지게 하고 싶은 경우에는 DENSE_RANK()를 사용해야 한다.
- 각 행에 대해 개별적으로 순위를 부여한다.
- PARTITION BY로 그룹화하여, 그룹별 순위를 계산한다.
- ORDER BY로 정렬 기준을 설정하여 순위를 매긴다.
2. RANK() WITHIN GROUP()
RANK() WITHIN GROUP()은 집계 함수로, 집계된 결과에서 특정 값의 순위를 계산한다. RANK() WITHIN GROUP은 행마다 순위를 반환하는 것이 아니라, 집계된 값에 대해 특정 조건에 맞는 순위를 구할 때 사용한다.
SELECT
DNAME,
RANK(3000) WITHIN GROUP (ORDER BY SAL DESC) AS rank
FROM employees
GROUP BY DNAME;
각 DNAME 그룹에서 SAL을 내림차순으로 정렬하고, SAL의 값이 3000인 데이터의 순위를 매긴다.
- 집계 함수로서, 집계된 결과에 대해 순위를 부여한다.
- 여러 행을 그룹화(GROUP BY)한 후 특정 열에 대해 순위를 매길 때 사용한다.
- RANK() WITHIN GROUP은 그룹화된 데이터에 대한 특정 값의 순위를 구할 때 유용하게 사용할 수 있다.
차이점 요약
함수 종류 | 윈도우 함수 | 집계 함수 |
반환 형태 | 원본 데이터의 각 행에 순위 부여 | 그룹화된 결과에서 특정 값의 순위를 계산 |
문법 | PARTITION BY, ORDER BY | WITHIN GROUP (ORDER BY ...) |
사용 용도 | 각 행에 대해 순위를 부여하고 결과 집합 유지 | 그룹화된 데이터에서 특정 값의 순위를 얻고자 할 때 |
RANK() OVER()는 주로 개별 행에 순위를 매길 때 사용하고, RANK() WITHIN GROUP()은 집계된 그룹에서 특정 값의 순위를 구할 때 사용한다.
예시) Table. employees
ID | NAME | DNAME | SAL |
1 | 홍길동 | 아시아지부 | 300 |
2 | 박길동 | 아시아지부 | 400 |
3 | 최길동 | 아시아지부 | 500 |
4 | 김길동 | 남유럽지부 | 450 |
5 | 이길동 | 남유럽지부 | 550 |
1. RANK() OVER()
각 직원의 급여 순위를 DNAME별로 계산하기.
SELECT
DNAME,
NAME,
SAL,
RANK() OVER(PARTITION BY DNAME ORDER BY SAL DESC) AS rank
FROM employees;
PARTITION BY DNAME을 통해 DNAME별로 데이터를 그룹화하고, 각 DNAME 그룹 내에서 SAL을 내림차순으로 정렬하여 순위를 매긴다.
아시아지부 | 최길동 | 500 | 1 |
아시아지부 | 박길동 | 400 | 2 |
아시아지부 | 홍길동 | 300 | 3 |
남유럽지부 | 이길동 | 550 | 1 |
남유럽지부 | 김길동 | 450 | 2 |
2. RANK() WITHIN GROUP() 예제
각 DNAME 그룹에서 특정 급여(SAL = 450 )가 몇 번째 순위에 있는지 구하기.
SELECT
DNAME,
RANK() WITHIN GROUP (ORDER BY SAL DESC) AS rank_for_450
FROM employees
WHERE SAL = 450
GROUP BY DNAME;
GROUP BY DNAME을 통해 DNAME별로 그룹화한 후, SAL이 450일 때의 순위를 각 그룹 내에서 구한다. WITHIN GROUP을 통해 그룹 내에서 SAL을 내림차순으로 정렬한 후, SAL = 450이 몇 번째 순위에 있는지 계산한다.
아시아지부 | 2 |
남유럽지부 | 2 |
댓글