ROLLUP 사용시에 나오는 소계값을 0 4 2,489

by 손님 [SQL Query] ROLLUP [2013.04.12 12:49:51]



안뇽하세여 오라클 쿼리 공부중입니다.

rollup 공부중인데 아직 초보라서 잘 모릅니다.

질문입니다.

SELECT DEPTNO,
  SUM(SAL)
    FROM EMP
 GROUP BY ROLLUP(DEPTNO);

이렇게 쿼리를 던지면 질의 결과

DETPNO     SUM(SAL)
   10 8750
   20 10875
   30   9400
NULL 29025  -- ROLLUP 결과인듯합니다

위 처럼 결과값이 나오는데여
제가 표현해보고 싶은값은  ROLLUP 의 결과 값을 최상위로 올려보고 싶고
그 값 앞에 합계를 넣어 보고 싶은데 아직 덜 배워서 그런지 방법적으로 몰라 고수님게 문의 드립니다.

제가 표현 하고 싶은결과는

DETPNO     SUM(SAL)
 합계 29025  -- ROLLUP 결과인듯합니다
   10 8750
   20 10875
   30   9400

이런식입니다 고수님들 예문 하나만 알려주세여





by 디케이 [2013.04.12 13:05:09]
ORDER BY GROUPING(deptno) DESC
혹은
rollup(deptno) 대신 cube(deptno)를 사용해보세요

by 손님 [2013.04.12 13:15:59]

SELECT DECODE(GROUPING(DEPTNO),0,DEPTNO,'합계') DEPTNO
  SUM(SAL)
    FROM EMP
 GROUP BY ROLLUP(DEPTNO)
 ORDER BY GROUPING(DEPTNO) DESC
;
아닌가요? 아직 초보라 정확하진 않지만 .....댓글 남깁니다

by 마농 [2013.04.12 13:22:57]
-- Order By 절에서의 GROUPING(deptno) 사용시 주의해야 합니다.
-- Order By 절이 제일 나중에 수행되므로 Select절의 알리아스를 우선 인식합니다.
-- 그냥 deptno 를 사용하면 Select 절의 알리아스인 deptno로 인식하여 에러납니다.
-- e.deptno 를 사용하여 알리아스가 아닌 테이블 컬럼으로 인식하도록 해야 합니다.
-- 컬럼명과 동일한 알리아스 사용시엔 정렬할 때 주의해야 합니다.
SELECT DECODE(GROUPING(deptno), 1, '합계', deptno) deptno
     , SUM(sal) sal
  FROM emp e
 GROUP BY ROLLUP(deptno)
 ORDER BY GROUPING(e.deptno) DESC, e.deptno
;

by 디케이 [2013.04.12 13:30:52]

ㅎㅎ 역시 명쾌한 답변이네요..

저두 참 많이배우네요. 감사합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입