a b c d 1 a y 100 1 a n 200 1 b n 100 1 b y 200 2 a n 200 2 a n 300 2 b y 100 2 b y 200
이렇게 data 가 있을경우에
group by rollup 을 이용하여
전체 d컬럼 합, a컬럼별 d컬럼 합 , b 컬럼별 d컬럼 합을 구하고 싶습니다.
c컬럼은 상관없이 말이죠.. group by rollup 으로 하려고하는데 어떤식으로 해야할지요..ㅜㅜ
by 신이만든짝퉁
[2014.03.11 11:39:20]
with tmp as ( select 1 a, 'a' b, 'y' c, 100 d from dual union all select 1 a, 'a' b, 'n' c, 200 d from dual union all select 1 a, 'b' b, 'n' c, 100 d from dual union all select 1 a, 'b' b, 'y' c, 200 d from dual union all select 2 a, 'a' b, 'n' c, 200 d from dual union all select 2 a, 'a' b, 'n' c, 300 d from dual union all select 2 a, 'b' b, 'y' c, 100 d from dual union all select 2 a, 'b' b, 'y' c, 200 d from dual ) select a, b, c, d_sum, ga, gb, gc, gd from ( select a, b, c, sum(d) d_sum , grouping(a) ga , grouping(b) gb , grouping(c) gc , grouping(d) gd from tmp group by cube (a, b, c, d) ) where (ga = 1 and gb = 1 and gc = 1 and gd = 1) or (ga = 0 and gb = 1 and gc = 1 and gd = 1) or (ga = 1 and gb = 0 and gc = 1 and gd = 1) ;
이게 도움이 될까요?
by drakdragon
[2014.03.11 20:22:25]
rollup 으로 하는법이 궁금했지만
도움이 많이 되었습니다
감사합니다
by 마농
[2014.03.11 16:35:51]
SELECT a, b, c
, SUM(d) d
FROM t
GROUP BY ROLLUP(a, (b, c))
;
by drakdragon
[2014.03.11 20:22:51]
감사합니다
rollup 안에 ()를 사용하는것을 간단하게 설명 부탁드려도될까요.ㅜㅜ
by 마농
[2014.03.12 09:19:16]
롤업은 단계별 소계를 구하는 함수이구요. 그룹바이 기준항목들을 오른쪽 항목(하위기준항목) 부터 차례로 지워나가면서 합산하는 개념입니다. GROUP BY ROLLUP(a, b, c) 는 다음 4가지 기준으로 합산합니다. 1. GROUP BY a, b, c 2. GROUP BY a, b 3. GROUP BY a 4. GROUP BY Null 이때 c 는 그룹바이의 기준이 아닌 부가적인 정보일 뿐이라면 기준이 되는 항목과 함께 괄호로 묶어줍니다. 롤업에서 오른쪽 항목이 지워질때 (b 따로, c 따로)가 아니라 (b,c)가 함께 지워지는 것이죠. GROUP BY ROLLUP(a, (b, c)) 는 다음 3가지 기준으로 합산합니다. 1. GROUP BY a, b, c 2. GROUP BY a 3. GROUP BY Null
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.