주니어 개발자가 되는 중입니다...loading....

Oracle 그룹함수 GROUP BY 본문

Oracle 오라클

Oracle 그룹함수 GROUP BY

휼양 2022. 10. 20. 20:42

<칼럼이 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
Comments