rollup, group_id(), grouping()

퀴즈로 배워보는 SQL, 그 두 번째 시간은 그룹 바이(GROUP BY)와 롤업(ROLLUP)의 기본원리에 대한 이해와 이를 이용해 문제를 해결하는 방법에 대해 알아본다. 지면 특성상 문제와 정답, 해설이 같이 있다. 진정으로 자신의 SQL 실력을 키우고 싶다면, 스스로 문제를 해결 한 후 정답과 해설을 참조하길 바란다. 공부를 잘 하는 학생의 문제집은 항상 문제지면의 밑바닥은 까맣지만 정답과 해설지면은 하얗다는 사실을 잊지말자. 스터디 가입현황을 보여주는 쿼리를 작성하는 문제입니다. 문제 다음과 같이 scott 유저의 emp 테이블이 있습니다
conn scott/tiger
SELECT * FROM emp;
그림 1] 문제 테이블 문제 테이블
  • 문제 테이블
[그림 2] 조회 결과
  • 조회 결과
[그림 1] 문제 테이블을 이용해 [그림 2]와 같은 결과를 도출하는 쿼리를 작성해 보세요. 쿼리 작성조건입니다. – 각 사원별로 부서코드, 사원번호, 성명, 급여가 조회돼야 합니다. – 각 부서별 급여 합계 및 평균금액을 새로운 행으로 표시해야 합니다. 정답 :
SELECT deptno
     , empno
     , DECODE(GROUP_ID(), 0, NVL(ename,'합계'), '평균') ename
     , DECODE(GROUP_ID(), 0, SUM(sal), ROUND(AVG(sal),2)) sal
  FROM scott.emp
 GROUP BY deptno, ROLLUP(deptno, (empno, ename))
 ORDER BY deptno, GROUP_ID(), empno;
출처 : http://oracleclub.com/lecture/2191

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다