본문 바로가기
TechNical/Oracle

WITH 문에서 테이블을 두개 맹글어 보자.

by 강멍멍이 2009. 3. 13.
반응형

원래 WITH문 이게 메인이 아닌데.. GROUP BY에 대한 고찰이었음.. =ㅅ=
마땅한 제목이 없어서. ㅋㅋㅋㅋㅋ

1. 테스트 테이블 생성

WITH tb1 AS (
             select 'A' as k1
                  , 1   as qty                   
               from dual
             union all
             select 'B', 2                   
               from dual
             union all
             select 'B', 3                   
               from dual
             union all
             select 'C', 1                   
               from dual
            ),
    tb2 AS (
            select 'A' as b1
                 , '나무'   as b2
              from dual
            union all
            select 'B', '문어바' 
              from dual
            union all
            select 'B', '꼬라바' 
              from dual                     
            union all
            select 'C', '거북이' 
              from dual   
            union all
            select 'C', '고래' 
              from dual
           )
SELECT tb1.k1
     , SUM(tb1.qty)    
     , COUNT(*)
  FROM tb1, tb2  -- with 문에 기술하면 from 절에 반드시 나와야 한다.
 WHERE tb1.k1 = tb2.b1
 GROUP BY tb1.k1
 
 
2. 일단 내가 원하는건 tb1 테이블에 있는 B 항목의 수량 합이었는데... 2 + 3 = 5 를 원하는 거였는데
   저렇게 쿼리 날리면 10 이 나온다.. 뭥미
   tb2 에 B 값이 두개가 있으므로 GROUP BY 해서 SUM 하니까 tb1 에서 qty 값이 두번씩 더해진다.
  
3. 그럼 뭐.. 어쩔수 없지.. 조인하기 하기전에 그룹으로 묶어 버릴까..

SELECT tb2.b1    
     , tb2.b2
     , tmp.qty    
  FROM tb2    
     , (
        SELECT k1, SUM(qty) as qty
          FROM tb1
         GROUP BY k1
       ) tmp
 WHERE tb2.b1 = tmp.k1
 GROUP BY tb2.b1, tmp.qty, tb2.b2
 ORDER BY tb2.b1


그러면 이렇게 나오긴 한다.

A 나무    1
B 꼬라바 5
B 문어바 5
C 거북이 1
C 고래    1

4. 근데... 아무리 봐도 이건 쓸대 없는 짓인거 같아 ㅋ 이렇게 할리가 없잖아 -_-

반응형

댓글