PARTITION 함수

이애옹·2022년 10월 19일
0

📝 PARTITION 함수의 의미

PARTITION 함수란?

그룹 내 순위 및 그룹별 집계를 구할 때 사용하는 함수

PARTITION 함수 사용방법

SELECT 순위함수() OVER(PARTITION BY 컬럼명 ORDER BY 컬럼명)
FROM 테이블명


SELECT 집계함수(컬럼명) OVER (PARTITION BY 컬럼명)
FROM 테이블명

참고로,
순위함수 : ROW_NUMBER, RANK, DENSE_RANK
집계함수 : SUM, AVG, MAX, MIN, COUNT

또, PARTITION BY 절 뒤에 여러개의 컬럼명을 추가하는것도 가능하다 :)


📝 GROUP BY vs PARTITION BY

그런데, GROUP BY절을 이용해도 그룹으로 데이터를 묶는것이 가능하다.

하지만 GROUP BY절과 PARTITION BY절은 다른점이 있다.

집계함수인 SUM 함수를 이용해서 두 절의 차이점을 알아보자~

이런 테이블이 있다고 가정해보자! 테이블명은 EMP!

EMPNOENAMEJOBSUM(SAL)
1000kimMANAGER1000
1001hongMANAGER2000
1002shimSALESMAN1500
1003leeSALESMAN2500

일단 먼저, 직업에 따라 급여를 계산하고 싶다고 하면,

1) GROUP BY 절을 사용 할 경우

사용구문

SELECT job, SUM(sal)
FROM emp
WHERE job IN ('MANAGER','SALESMAN')
GROUP BY job
ORDER BY job

결과

JOBSUM(SAL)
MANAGER3000
SALESMAN4000

2) PARTITION BY 절을 사용 할 경우

사용구문

SELECT empno, ename, job, SUM(sal) OVER(PARTITION BY job)
FROM emp
WHERE job IN ('MANAGER','SALESMAN')
ORDER BY job

결과

EMPNOENAMEJOBSUM(SAL)
1000kimMANAGER3000
1001hongMANAGER3000
1002shimSALESMAN4000
1003leeSALESMAN4000

3) GROUP BY 절과 PARTITION BY절의 차이점

위 예제에서 보이는것 처럼 가장 큰 차이점은
데이터의 변형 여부 이다.

GROUP BY절의 경우 기존행에 있던 데이터는 작성한 쿼리에 의해 새롭게 생성된 행에 입력된다.
그 과정에서 기존의 상세 데이터 값은 잃게 된다.

하지만 PARTITION BY절의 경우, GROUP BY절과 집계된 값은 동일하지만 집계된 값을 새로운 행에 넣는것이 아닌, 기존 행에 추가로 표시하기 때문에 데이터의 변형이 일어나지 않는다.

집계함수를 이용해 분석된 결과만 확인하고 싶을 경우에는 GROUP BY절을 사용해도 괜찮지만,
기존의 행과 새로 구한값을 세세하게 확인하고 싶을때는 PARTITION BY절이 더 좋다~~~



📝 PARTITION BY 예제

SUM 함수를 사용 해 봤으니 다른 함수도 사용해보쟈

1) 집계함수 - MAX 함수

사용구문

SELECT empno, ename, job, sal, MAX(SAL) OVER(PARTITION BY job)
FROM emp
WHERE job IN ('MANAGER','SALESMAN')
ORDER BY job

결과

EMPNOENAMEJOBSUM(SAL)
1000kimMANAGER2000
1001hongMANAGER2000
1002shimSALESMAN2500
1003leeSALESMAN2500

2) 순위함수 - ROW_NUMBER 함수

사용구문

SELECT empno, ename, job, sal, 
	   ROW_NUMBER() OVER(PARTITION BY job ORDER BY sal) AS rn
FROM emp
WHERE job IN ('MANAGER', 'SALESMAN')
ORDER BY job

결과

EMPNOENAMEJOBSUM(SAL)RN
1001hongMANAGER20001
1000kimMANAGER10002
1003leeSALESMAN25001
1004shimeSALESMAN15002

참고로, ROW_NUMBER 함수와 RANK 함수 모두 순위를 구할 때 사용한다.

대신 ROW_NUMBER 함수의 경우 동일 순위의 값이 있을 경우 정렬 순서에 따라 순위를 입력하고,
RANK 함수의 경우 동일 순위의 값이 있을 경우 동일한 순위를 표시한다.

내가 만든 테이블의 경우 겹치는 값이 따로 없으니 패스!

👀 참고자료

profile
안녕하세요

0개의 댓글

관련 채용 정보