원래 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. 근데... 아무리 봐도 이건 쓸대 없는 짓인거 같아 ㅋ 이렇게 할리가 없잖아 -_-
댓글