[Oracle] 그룹 함수 ( ROLLUP / CUBE / GROUPING )

라라·2023년 4월 4일
0

Oracle

목록 보기
12/16

📍 ROLLUP

👉 두 개 이상의 인수를 전달했을 때 두 개 컬럼의 집계,

❗ D9 / NULL 값은 첫번째 컬럼의 소계를 의미한다. (17700000)
❗ 마지막 줄에 둘 다 NULL 값은 총계를 의미한다. (73846240)
❗ SUM, AVG 등 함수가 꼭 있어야 한다.

SELECT DEPT_CODE, JOB_CODE, SUM (SALARY)
FROM EMPLOYEE
WHERE DEPT_CODE IS NOT NULL
GROUP BY ROLLUP (DEPT_CODE, JOB_CODE);



📍 CUBE

👉 두 개 이상의 인수를 전달했을 때 두 개 컬럼의 집계,
첫번째 인수 컬럼의 소계, 두번째 인수 컬럼의 소계, 전체 총계

❗ ROLLUP은 첫번째 인수 컬럼의 소계만 조회하지만,
 CUBE는 두번째 컬럼의 소계를 모두 조회한다.

SELECT DEPT_CODE, JOB_CODE, SUM (SALARY)
FROM EMPLOYEE
WHERE DEPT_CODE IS NOT NULL
GROUP BY CUBE (DEPT_CODE, JOB_CODE);

✏️ 부서별, 직책별, 총 사원을 한 번에 조회하기

SELECT DEPT_CODE, JOB_CODE, COUNT (*)
FROM EMPLOYEE
WHERE DEPT_CODE IS NOT NULL
GROUP BY CUBE (DEPT_CODE, JOB_CODE);



📍 GROUPING SETS

👉 여러 GROUP BY 절이 있는 구문을 하나로 작성하게 해주는 기능
👉 첫번째 인수 컬럼의 소계, 두번째 인수 컬럼의 소계
👉 ROLLUP과 CUBE와 달리 계층 구조가 나타나지 않는다. 따라서 인자의 순서가 달라도 결과는 똑같다.

SELECT DEPT_CODE, JOB_CODE, MANAGER_ID, AVG (SALARY)
FROM EMPLOYEE
GROUP BY GROUPING SETS
((DEPT_CODE, JOB_CODE, MANAGER_ID), (DEPT_CODE, JOB_CODE), (DEPT_CODE, MANAGER_ID));



📍 GROUPING

👉 GROUPING 함수는 직접 그룹별 집계를 구하지는 않지만 앞서 말한
ROLLUP, CUBE, GROUPING SETS 을 지원하는 역할을 한다.
👉 GROUPING 함수를 실행하면 ROLLUP, CUBE로 집계된 ROW 1을 반환 아니면 0을 반환한다.

profile
코딩하는 라라 :)

0개의 댓글