[SQL] 그룹함수

2022. 3. 30. 01:36카테고리 없음

RANK 함수

ORDER BY를 포함한 QUERY 문에서 특정 항목(칼럼)에 대한 순위를 구하는 함수이다.

이 때 특정 범위(PARTITION) 내에서 순위를 구할 수도 있고, 전체 데이터에 대한 순위를 구할 수도 있다.

또한 동일한 값에 대해서는 동일한 순위를 부여한다.

 

ex) 사원 데이터에서 급여가 높은 순서와 JOB별로 급여가 높은 순서를 같이 출력한다.

SELECT JOB, ENAME, SAL,
-- 급여가 높은 순
RANK() OVER (ORDER BY SAL DESC) AS ALL_RK
-- JOB 별로 급여가 높은 순
RANK() OVER (PARTITION BY JOB ORDER BY SAL DESC) AS JOB_RK
FROM EMP;

 

ex) 앞 SQL 문의 결과는 JOB 과 SALARY 기준으로 정렬되어 있지 않다.

새로운 SQL에서는 전체 SALARY 순위를 구하는 ALL_RK 칼럼은 제외하고, 업무별로 SALARY 순서를 구하는 JOB_RK만 알아보자.

SELECT JOB, ENAME, SAL
-- JOB 별로 급여가 높은 순
RANK() OVER (PARTITION BY JOB ORDER BY SAL DESC) AS JOB_RK
FROM EMP;

업무별로 SALARY 순서를 구하는 JOB_RANK만 사용한 경우 파티션의 기준이 된 JOB과 SALARY별로 정렬이 되어있는 것을 볼 수 있다.

 

DENSE_RANK 함수

RANK함수와 유사하나 동일한 순위를 하나의 건수로 취급한다.

ROW_NUMBER 함수

RANK나 DENSE_RANK 함수가 동일한 값에 대해서는 동일한 순위를 부여하는 데 반해, 동일한 값이라도 고유한 순위를 부여한다.