반응형
글의 서론
회사 과장님께서 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 |