본문 바로가기

IT/오라클

[Oracle] PARTITION BY란 무엇인가? (분석함수)

반응형

글의 서론

회사 과장님께서 PARTITION BY라는 오라클 함수를 사용하시는 것 보았다.

멋있어 보였다.

 

그래서 좀 나도 써볼까? 라는 마음에 Search해서 정리한 내용을 좀 적어봅니다.

DB는 해도해도 어렵네요.

 

PARTITION BY는 분석함수와 함께 사용됩니다.

 

분석함수 정의

분석함수란 테이블에 있는 로우(컬럼)에 대해 특정 그룹별로 집계값을 산출할 때 사용 되는 함수들이다.

 

분석함수 예시

SUM, AVR, MAX, MIN, COUNT

 

보니깐 GROUP BY로 묶여서 사용되는 집계 값을 만드는 함수들이 분석함수인가 봅니다.

 

그렇다면 PARTITION BY란?

GROUP BY의 대체제라고 보여집니다.

 

SELECT JOB, AVR(SALARY)
FROM FIRM_TABLE
WHERE AGE > 35
GROUP BY JOP

위의 쿼리는 35세 이상의 직업별 평균 급여를 알려주는 내용입니다.

 

근데 만약 각 사람들 리스트가 쭉 나오면서 그 사람이 갖고 있는 직업과 그 직업 평균을 알고 싶다면 어떻게 쿼리를 짜야 할까요? 따로 서브 테이블 만들어서 직업별 평균 급여 만들고(위에 처럼) JOIN 하면 됩니다.

 

하지만 PARTIRION BY를 사용하면 더 간단한 쿼리가 나와요.

( 이게 더 성능면에서 좋은지는 아직 의문, 이거 어떻게 작동하는지 잘 몰르겠어요. SELECT 이 작동 될때 loop돌면서 그때그때 계산하나?)

 

SELECT NAME,
	JOB,
        AVR(SALARY) OVER(PARTITION BY JOB)
FROM FIRM_TABLE
WHERE AGE > 35
ORDER BY JOB

위에 쿼리는 이제 사람들 이름과 그 사람 직업, 그리고 직업별 평균 연봉이 함께 나오게 되겠죠.

쿼리가 아주 깔끔해졌어요.

 

성능 고려 안하고 가독성으로 보면 확실히 괜찮은 방법인듯 합니다.

반응형

'IT > 오라클' 카테고리의 다른 글

[PL/SQL] 에러 해결 : pls-00905 object is invalid  (0) 2022.05.12
[Oracle] 오라클의 Synonym(시노님)이란?  (0) 2021.07.21
[Oracle] SQL 수행단계  (0) 2021.06.29