IT
[Oracle] 오라클 Partition Outer Join, 파티션 아우터 조인 (10g부터 제공)
정미나
2019. 8. 7. 18:59
처음에 보고 매우 헷갈렸다.
근데 몇번 실행해보니 감이 잡히더라.
역시 백문이 불여일견이다.
우선 이름도 생소한 Partition Outer Join이 어떨 때 쓰이는지를 알아보자.
날짜별, 매체별 주문 테이블이 있다.
그리고 매체정보 테이블이 있다.
이 두 테이블을 JOIN하여 아래와 같은 결과를 도출하고자 한다.
일단 MEDIA_NM이 빠짐없이 나와야하므로 드라이빙 테이블은 매체정보 테이블이 되겠다.
이 매체정보 테이블을 OUTER JOIN 한다. 뭐랑?
주문 테이블을 ORD_DT 컬럼으로 그룹핑한 애들이랑..
그러려면 주문 테이블을 ORD_DT 기준으로 PARTITION 해야 하므로
PARTITION BY 구문에는 ORD_DT 컬럼이 들어가게 된다.
SELECT TO_CHAR(ORD_DT, 'YYYYMMDD') ORD_DT, M.MEDIA_NM, NVL(SUM(O.ORD_AMT), 0) SUM FROM MEDIA M LEFT OUTER JOIN ORD_HIST O PARTITION BY (O.ORD_DT) ON O.MEDIA_CD = M.MEDIA_CD GROUP BY ORD_DT, MEDIA_NM ORDER BY O.ORD_DT; |
한술 더 떠 요런 식으로 소계까지 도출하고자 한다면
아래와 같이 쿼리를 작성해주면 된다.
SELECT TO_CHAR(ORD_DT, 'YYYYMMDD') ORD_DT, DECODE(M.MEDIA_NM,NULL,'소계',M.MEDIA_NM) MEDIA_NM, NVL(SUM(O.ORD_AMT), 0) SUM FROM MEDIA M LEFT OUTER JOIN ORD_HIST O PARTITION BY (O.ORD_DT) ON O.MEDIA_CD = M.MEDIA_CD GROUP BY ORD_DT, ROLLUP(MEDIA_NM) ORDER BY O.ORD_DT; |
이렇듯,
안 해봐서 어려운거지 알고나면 아무것도 아니다.