주니어 개발자가 되는 중입니다...loading....
Oracle 그룹함수 GROUP BY 본문
<칼럼이 2개 일 때>
1. GROUP BY ROLLUP
-- 칼럼이 1개일 때와 다르게
-- 두 개의 컬럼을 매개변수로 전달했을 때 두 개 칼럼 그룹의 집계, 첫번째 매개변수의 소계, 전체 ROW에 대한 총합
SELECT DEPT_CODE, JOB_CODE, SUM(SALARY)
FROM EMPLOYEE
WHERE DEPT_CODE IS NOT NULL -- 부서가 없는 대상은 제외한다
GROUP BY ROLLUP (DEPT_CODE, JOB_CODE) --D1의 마지막에 D1의 월급합계가 나온다(ROLLUP의 첫번째 기준으로), 맨 마지막 줄은 총계
ORDER BY DEPT_CODE;
2. GROUP BY CUBE
-- 두 개의 컬럼을 매개변수로 전달했을 때 두 개 칼럼 그룹의 집계, 첫번째 매개변수의 소계, 전체 ROW에 대한 총합
-- 그리고 두번째 매개변수의 소계도 출력한다
-- 순서 : 칼럼 대상 마다의 집계 - 한 집계가 끝나면 첫번 째 칼럼의 합계 -두번째 칼럼의 합계 - 총계
-- 같은 부서 내에 같은 직책의 월급의 합 - 같은 부서의 월급의 합 - 같은 직책의 월급의 합 - 계
SELECT DEPT_CODE, JOB_CODE, SUM(SALARY)
FROM EMPLOYEE
WHERE DEPT_CODE IS NOT NULL --부서가 없는 대상은 제외한다
GROUP BY CUBE(DEPT_CODE, JOB_CODE)
ORDER BY DEPT_CODE;
3 .GROUPING : ROLLUP, CUBE로 집계된 ROW를 확인해주는 함수
-- ROLLUP, CUBE로 집계된 ROW는 1을 반환
-- 집계여부를 확인해주는 함수
SELECT DEPT_CODE, JOB_CODE, COUNT(*), GROUPING(DEPT_CODE), GROUPING(JOB_CODE)
,CASE
WHEN GROUPING(DEPT_CODE)=0 AND GROUPING(JOB_CODE)=1 THEN '부서별 인원 수'
WHEN GROUPING(DEPT_CODE)=0 AND GROUPING(JOB_CODE)=0 THEN '그룹별 인원 수'
WHEN GROUPING(DEPT_CODE)=1 AND GROUPING(JOB_CODE)=1 THEN 'WHERE 절에 맞는 총 인원 수'
WHEN GROUPING(DEPT_CODE)=1 AND GROUPING(JOB_CODE)=0 THEN '직책별 인원수'
END AS 비고
FROM EMPLOYEE
WHERE DEPT_CODE IS NOT NULL
GROUP BY CUBE(DEPT_CODE, JOB_CODE)
ORDER BY 비고;
'Oracle 오라클' 카테고리의 다른 글
| Oracle 서브쿼리(sub query) (0) | 2022.10.21 |
|---|---|
| Oracle JOIN : 테이블을 합쳐서 출력하기 (0) | 2022.10.20 |
| Oracle 함수 (0) | 2022.10.20 |
| Oracle 날짜(DATE) 처리 함수 (0) | 2022.10.20 |
| Oracle SQL 정의 (0) | 2022.10.20 |