반응형
목적: '=' 연산자가 아닌 BETWEEN, LIKE, 부등호 같은 연산자로 조인해야 할 때도 있다.
*월별지점매출 테이블이 있다고 하자. 이 테이블을 이용해 각 지점별로 판매월과 함게 증가하는 누적매출(RUNNING TOTAL)을 구하려 한다.
1. 윈도우 함수(오라클에서는 분석함수(Analytic Function)라고 함)를 이용하여 아래와 같이 간단히 원하는 결과를 얻을 수 있다.
SELECT 지점, 판매월, 매출
, SUM(매출) OVER (PARTITION BY 지점 ORDER BY 판매월
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 누적 매출
FROM 월별지점매출
;
2. 만약 윈도우 함수가 지원되지 않는 DBMS를 사용하고 있다면 아래와 같이 부등호 조인을 이용해 같은 결과를 얻을 수 있다.
SELECT T1.지점, T1.판매월, MIN(T1.매출) 매출, SUM(T2.매출) 누적매출
FROM 월별지점매출 T1, 월별지점매출 T2
WHERE T2.지점 = T1.지점
AND T2.판매월 <= T1.판매월
GROUP BY T1.지점, T1.판매월
ORDER BY T1.지점, T1.판매월
;
반응형
'개발 및 관리 > Oracle 9i, 10g, 11g, 12c, 19c' 카테고리의 다른 글
CASE문 활용(고급 SQL 활용) - SQL전문가 가이드 p.674~p.675 (0) | 2012.10.26 |
---|---|
Between 조인 - SQL전문가 가이드 p.664 (0) | 2012.10.25 |
두 개 이상의 값을 리턴하고 싶을 때 - SQL전문가 가이드 p.653~p.654 (0) | 2012.10.25 |
Sort Merge Join의 특징 - SQL전문가 가이드 p.648 (0) | 2012.10.25 |
NL Join의 특징 - SQL전문가 가이드 p.645 (0) | 2012.10.25 |