1. 그룹함수
= 검색된 여러 행을 이용해 통계정보를 계산하는 함수
* GROUP BY 뒤에 전부 위치한다!
2. 그룹함수 종류
1) ROLLUP
= group by 절과 같이 사용되며 누적과 총계를 구할시 유용하다.
EX) SELECT job, SUM(sal) FROM emp GROUP BY ROLLUP(job);
-> 결과에 급여합계에 대한 총계가 나옴
2) GROUPING 함수
= ROLLUP & CUBE에 의한 소계가 발생시 유용하게 사용한다.
소계가 계산된 결과, GROUPING(조건식) = 1
그 외의 결과, GROUPING(조건식) = 0
=> GROUPING 함수와 DECODE, CASE 제어문으로 소계를 나타내는 필드에 원하는 문자열을 지정할 수 있어 보고서 작성시 유용
EX) SELECT CASE GROUPING(DNAME) WHEN 1 THEN 'All Departments' ELSE DNAME END AS DNAME,
CASE GROUPING(JOB) WHEN 1 THEN 'All Jobs' ELSE JOB END AS JOB,
COUNT(*) "Total Empl", SUM(SAL) "Total Sal"
FROM EMP, DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO
GROUP BY DNAME, ROLLUP(JOB)
3) CUBE 함수
= 결합가능한 모든 값에 대해서 다차원 소계 출력
-> 연산이 많아서 시스템에 부담을 줄 수 있다
EX) SELECT
CASE GROUPING(DNAME) WHEN 1 THEN 'All Departments' ELSE DNAME END AS DNAME,
CASE GROUPING(JOB) WHEN 1 TEHN 'All Jobs' ELSE JOB END AS JOB,
COUNT(*) "Total Empl",
SUM(SAL) "Total Sal"
FROM EMP, DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
GROUP BY CUBE(DNAME,JOB);
4) GROUPING SET
= 특정항목에 대한 소계를 출력할시 유용하다 / 표시된 인수들에 대한 개별 집계를 구할 수 있다
순서 상관없이 결과가 출력된다
EX) SELECT DECODE(GROUPING(DNAME), 1, 'All Departments', DANME) AS DNAME,
DECODE(GROUPING(JOB), 1, 'All Jobs', JOB) AS JOB,
COUNT(*) "Total Empl", SUM(SAL) "Total Sal"
FROM EMP, DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
GROUP BY GROUPING SETS (DNAME, JOB);
'DB 이야기' 카테고리의 다른 글
디비 이야기 27. 조인 수행 원리 (0) | 2020.04.04 |
---|---|
디비이야기 25. PL/SQL(절차형 SQL) (0) | 2020.03.29 |
디비 이야기 24. 계층형 질의 (0) | 2020.03.16 |
디비 이야기 23. 트랜젝션 (0) | 2020.03.11 |
디비 이야기 22. 데이터 무결성 (0) | 2020.03.11 |