Rollup 써야하는거 같은데 잘안되서 질문드려요. 0 4 918

by 모레츠 [SQL Query] [2012.11.16 10:43:29]


운동

가입자수

가입금액

비가입자수

전체

A

측구

 

 

 

 

농구

 

 

 

 

배구

 

 

 

 

그외

 

 

 

 

B

축구

 

 

 

 

농구

 

 

 

 

배구

 

 

 

 

그외

 

 

 

 

전체

축구

 

 

 

 

농구

 

 

 

 

배구

 

 

 

 

그외

 

 

 

 


팀이라는 칼럼에 값이 1이면 A팀, 2면 B팀이고
운동이라는 칼럼에는 값이 1이면 축구, 2이면 농구, 3이면 배구가 있고
가입이라는 칼럼에 값이 1이면 가입자, 2이면 비가입자로 나뉘는데
그걸 카운트해서 가입자수, 비가입자수에 넣어주고
가입자일때 가입금액이라는 칼럼에 값이 있는데 그걸 SUM해서 나타내주면되네요.
우측 전체는 해당팀, 해당운동별로의 가입자수 + 비가입자수의 합이고
아래쪽 전체는 a팀 b팀 합친 값입니다.

나름 case 문, rollup 구문 사용해봤지만 잘 안돼서 올립니다..ㅠ

by 마농 [2012.11.16 12:33:30]
SELECT DECODE(팀, 1, 'A팀', 2, 'B팀', '전체') 팀
     , DECODE(운동, 1, '축구', 2, '농구', 3, '배구', '그외') 운동
     , COUNT(DECODE(가입, 1, 1)) 가입
     , SUM (DECODE(가입, 1, 가입금액)) 가입금액
     , COUNT(DECODE(가입, 2, 1)) 비가입
     , COUNT(*) 전체
  FROM 테이블 a
 GROUP BY ROLLUP(팀)
     , DECODE(운동, 1, '축구', 2, '농구', 3, '배구', '그외')
 ORDER BY a.팀, MIN(a.운동)
;

by 모레츠 [2012.11.16 13:21:09]
 마농님 제가 문제를 잘못보고 올렸네요.
운동부분에 그외가 아니라 합계이네요.. 이럴경우는 어떻게 해야하나요??ㅠㅠ

by 마농 [2012.11.16 13:26:50]
SELECT DECODE(팀, 1, 'A팀', 2, 'B팀', '전체') 팀
     , DECODE(운동, 1, '축구', 2, '농구', 3, '배구', '합계') 운동
     , COUNT(DECODE(가입, 1, 1)) 가입
     , SUM  (DECODE(가입, 1, 가입금액)) 가입금액
     , COUNT(DECODE(가입, 2, 1)) 비가입
     , COUNT(*) 전체
  FROM 테이블 a
 GROUP BY CUBE(팀, 운동)
 ORDER BY a.팀, a.운동
;

by 모레츠 [2012.11.16 13:42:27]

CUBE 라는 어떤 역활인지 알아봐야겠네요

바쁜시간 답변 해주셔서 감사합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입