시소당
그룹핑된 테이블의 outer join(10g)
10g의 SELECT문 특색 중 하나인 "Grouped Table Outer Join"이란 표준 ANSI JOIN을 확장한 것인데 Group By에 사용되는 컬럼이나 참조되는 컬럼에 대해 WITHIN GROUP구를 사용하는 것이 특징 입니다.
아래 예제에서는 With문을 사용했는데 WITH란? 하나의 가상 테이블(뷰) 정도 생각하시면 이해가 되실 겁니다. 보통 SQL문안에 반복되어 SELECT 되는 것들이 있다면(보통 UNION의 경우에 많이 나타나죠) WITH문을 사용하신다면 효율적 일겁니다. WITH문은 Oracle 강좌에서 검색하여 찾아 보시기를 바라며……
기본문법 형식은 다음과 같구요~
<Table_reference> WITHIN GROUP (<expr>[,])
실제 예를 간단히 보도록 하죠^^
WITH X AS (
SELECT time_id, loader_id, sum(loaded_weight) total_weight
FROM shipments
WHERE loader_id = 165432
GROUP BY time_id, loader_id
)
SELECT X.loader_id, t.time_id,
SUM(total_weight) OVER
(partition by loader_id, t.calendar_year
ORDER BY T.time_id) as YTD_tonnes
FROM X WITHIN GROUP (loader_id)
RIGHT OUTER JOIN TIMES T
ON (x.time_id = t.time_id);