Oracle DBA/SQL

052 : 데이터 분석 함수로 집계 결과 출력하기 1(ROLLUP)

Nuez 2023. 6. 29. 12:23
반응형

예제1. 부서번호, 부서번호별 토탈 월급을 출력하시오. 

SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno
ORDER BY 1;


예제2. 부서번호, 부서번호별 토탈 월급을 출력하는데, 부서번호별 토탈월급에 대한 총합이 맨 아래에 출력되게 하시오. 

SELECT deptno, SUM(sal)
FROM emp
GROUP BY ROLLUP(deptno);


문제 260. 직업, 직업별 토탈 월급을 출력하는데, 맨 아래에 전체 토탈 월급이 출력되게 하고, 토탈 월급들을 출력할 때 천단위 콤마 표시를 하시오. 

SELECT job AS 직업, to_char(SUM(sal),'999,999') AS "부서별 총 월급"
FROM emp
GROUP BY ROLLUP(job);


 문제 261. 위의 결과를 출력하되, 마지막 총합 값 왼쪽에 '전체 집계 :'라고 출력되게 하시오.  

SELECT nvl(job, '전체 집계 :') AS 직업, to_char(SUM(sal),'999,999') AS "부서별 총 월급"
FROM emp
GROUP BY ROLLUP(job);

포인트 : null값 대체하는 NVL 함수 의 사용


문제 262. 부서번호, 직업, 부서번호별 직업 토탈 월급을 출력하시오.

SELECT deptno, job, SUM(sal)
FROM emp
GROUP BY deptno, job
ORDER BY deptno, job;


문제 263. 입사한 년도(4자리), 직업, 입사한 년도별 직업의 토탈 월급을 출력하시오.

SELECT to_char(hiredate,'RRRR') as 입사년도, job, SUM(sal)
FROM emp
GROUP BY to_char(hiredate,'RRRR'), job
ORDER BY to_char(hiredate,'RRRR'), job;


문제 264. 부서번호, 직업, 부서번호 별 직업 토탈월급을 출력하는데, roll up을 써서 출력하시오. 

SELECT deptno, job, SUM(sal)
FROM emp
GROUP BY ROLLUP(deptno, job);

 

출력되는 결과 

1. 각 부서내 직업별 토탈 월급 (1,2,3 / 5,6,7 /9,10,11행)
2. 부서번호별 토탈 월급 (4 / 8/ 12행)
3. 전체 토탈 월급 (13행)

 

* ROLLUP 함수 안에 컬럼의 갯수 +1개만큼 집계한 결과 그룹이 출력됨.

즉, 이 경우 deptno, job이라는 컬럼 2개를 기입했으므로, 출력되는 결과의 종류는 3종류임 (2+1)


문제 265. 아래의 SQL을 실행하기 전에 출력될 결과를 예측해보시오. 

SELECT deptno, job ,mgr, SUM(sal)
FROM emp
GROUP BY ROLLUP(deptno, job, mgr);

출력되는 결과의 종류 : 4종류 (3컬럼 + 1)

1. 각 부서 내 직업의 mgr별 토탈 월급 (deptno, job, mgr)
2. 각 부서 내 직업별 토탈 월급 (deptno, job)
3. 각 부서별 토탈 월급 (deptno)
4. 전체 토탈 월급 (전체)