Java & Python

[Oracle] 그룹화 연산 함수

토끼퉁 2023. 9. 4. 18:57

고급 그룹화 연산 함수 

GROUP BY 를 도와주는 함수들(HAVING이랑 같은 포지션)

1. ROLLUP
GROUP BY 절에 지정된 열 목록에 대해서 서브 그룹, 각 열에 대한 합계를 생성해준다.

SELECT DEPTNO, JOB, SUM(SAL) 
FROM EMP
GROUP BY (DEPTNO, JOB)

→ DEPT & JOB 기준으로 합계를 생성해준다.

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

 DEPT & JOB 기준 합계, 전체 그룹, DEPTNO 그룹 합계

 


2. CUBE
GROUP BY 절에 지정된 열 목록에 대해서 서브 그룹, 각 열에 대한 합계를 생성해준다. 다차원 분석 쿼리에 유리하다.

SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY CUBE(DEPTNO, JOB)

 DEPT & JOB 기준 합계, 전체 그룹, DEPTNO 그룹 합계, JOB 그룹 합계

 


3. GROUPING SETS
GROUP BY 절에 지정된 열 목록에 대해서 서브 그룹, 각 열에 대한 합계를 생성해준다. 복잡한 그룹화에서 사용된다.

SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY GROUPING SETS((DEPTNO), (JOB))

 



GROUPING 
직접적으로 합계를 생성해주는 함수는 아니고, 그룹 함수들을 도와주는 함수다.

SELECT DEPTNO, JOB, COUNT(*), SUM(SAL), GROUPING(DEPTNO),GROUPING(JOB)
FROM EMP
GROUP BY CUBE(DEPTNO, JOB)


집계된 결과에 대해서 1의 값을 가지고, 그렇지 않은 값에 대해서 0의 값을 가진다.


추가 수당 '해당 사항 없음', '추가 수당 없음', '추가 수당 xx'
EMP 테이블과 DEPT 테이블에서 공통으로 있는 부서번호 출력
연도별 부서별 인원수
각 부서별, 직업별, 그룹화된 부서 + 각 직업별, 전체 인원수, 급여 총액 (그룹화된 부서 : GROUP_DEPT, 그룹화된 직업 : GROUP_JOB)