본문 바로가기
IT

[SQLD]SQL활용_그룹함수

by 또닝 2017. 11. 22.

ROLLUP

소그룹간의 소계를 계산.

GROUP BY의 확장된 형태로 사용하기 쉬우며 병렬로 수행이 가능하기 때문에 매우 효과적이다.

시간 및 지역처럼 계층적 분류를 포함하고 있는 데이터의 집계에 적합하다.


CUBE

결합 가능한 모든 값에 대하여 다차원적인 집계를 생성.

ROLLUP에 비해 다양한 데이터를 얻는 장점이 있지만, 시스템에 부하를 많이 주는 단점이 있다.


GROUPING SETS

원하는 특정 항목에 대한 소계만 손쉽게 추출할 수 있는 장점이 있다.


--1. 부서명과 업무명을 기준으로 사원수와 급여 합을 집계 SELECT DNAME , JOB , COUNT ( * ) Total_Emp , SUM (SAL) Total_Sal FROM EMP, DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO GROUP BY DNAME, JOB; --2. 부서명과 업무명을 기준으로 집계한 일반적인 GROUP BY SQL 문장에 ROLLUP 함수를 사용 SELECT DNAME , JOB , COUNT ( * ) Total_Emp , SUM (SAL) Total_Sal FROM EMP, DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO GROUP BY ROLLUP (DNAME, JOB); --3. ROLLUP 함수를 추가한 집계 보고서에서 집계 레코드를 구분할 수 있는 GROUPING 함수가 추가 SELECT DNAME , GROUPING (DNAME) , JOB , GROUPING (JOB) , COUNT ( * ) Total_Emp , SUM (SAL) Total_Sal FROM EMP, DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO GROUP BY ROLLUP (DNAME, JOB); --4. ROLLUP 함수를 추가한 집계 보고서에서 집계 레코드를 구분할 수 있는 GROUPING 함수와 DECODE 함수를 함께 사용 SELECT DECODE (GROUPING (DNAME), 1, 'All Departments', DNAME) AS DNAME , DECODE (GROUPING (JOB), 1, 'All Jobs', JOB) AS JOB , COUNT ( * ) Total_Emp , SUM (SAL) Total_Sal FROM EMP, DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO GROUP BY ROLLUP (DNAME, JOB); --5. CUBE 함수를 추가한 집계 보고서에서 집계 레코드를 구분할 수 있는 GROUPING 함수와 DECODE 함수를 함께 사용 SELECT DECODE (GROUPING (DNAME), 1, 'All Departments', DNAME) AS DNAME , DECODE (GROUPING (JOB), 1, 'All Jobs', JOB) AS JOB , COUNT ( * ) Total_Emp , SUM (SAL) Total_Sal FROM EMP, DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO GROUP BY CUBE (DNAME, JOB); --6.GROUPING SETS 함수로 부서별, JOB별 인원수와 급여 합 SELECT DECODE (GROUPING (DNAME), 1, 'All Departments', DNAME) AS DNAME , DECODE (GROUPING (JOB), 1, 'All Jobs', JOB) AS JOB , COUNT ( * ) Total_Emp , SUM (SAL) Total_Sal FROM EMP, DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO GROUP BY GROUPING SETS (DNAME, JOB); --7. 부서-JOB-매니저 별 집계와, 부서-JOB 별 집계와, JOB-매니저 별 집계 SELECT DNAME , JOB , MGR , SUM (SAL) Total_Sal FROM EMP, DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO GROUP BY GROUPING SETS ( (DNAME, JOB, MGR), (DNAME, JOB), (JOB, MGR));




'IT' 카테고리의 다른 글

svn cleanup 에러(엑세스가 거부되었습니다.) 해결방법  (0) 2022.10.11
SQLD 시험 후기  (1) 2017.12.08
[SQLD] SQL기본_JOIN  (0) 2017.11.21
[SQLD] SQL기본_GROUP BY, HAVING절  (0) 2017.11.21
[SQLD] 함수  (0) 2017.11.20