정미나닷컴
[Oracle] 오라클 Partition Outer Join, 파티션 아우터 조인 (10g부터 제공) 본문
처음에 보고 매우 헷갈렸다.
근데 몇번 실행해보니 감이 잡히더라.
역시 백문이 불여일견이다.
우선 이름도 생소한 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; |
이렇듯,
안 해봐서 어려운거지 알고나면 아무것도 아니다.
'IT' 카테고리의 다른 글
[Java] Spring Boot(스프링 부트) 개발환경 셋팅, STS 설치 (0) | 2020.08.30 |
---|---|
[Oracle] Sql Developer Data Modeler, git 연동, github (0) | 2020.04.23 |
[Oracle] 오라클 계층 쿼리, START WITH... CONNECT BY (feat. SYS_CONNECT_BY_PATH 함수) (1) | 2019.08.02 |
주소검색 시스템 구축, 도로명주소 API 활용, 주소DB 활용, 주소정제 솔루션 미사용 (0) | 2019.07.27 |
[Oracle] 오라클 테이블 스페이스, 데이터 파일 관련 명령어 (0) | 2019.06.19 |