'국비지원'의 시작

오라클 비긴즈 04 ( GROUP BY절 , GROUPING SETS , ROLLUP )

개발할 결심 2023. 2. 9. 17:47

 이번에는 GROUP BY 절 과 ROLLUP, GROUPING SETS  등에 대해서 설명해보려고 한다.  밑의 employees 라는 테이블이 있다고

가정해보자.

 이번에 GROUP BY 절을 통해서 DEPARTMENT_ID ( 부서번호) 부서별 SALARY 의 합을 구해주려고 한다.. 실행방법은 다음과 같고, 실행결과 또한 밑의 이미지와 같다.  

SELECT  department_id as 부서번호 , sum ( salary ) as 부서별월급합
FROM employees 
GROUP BY  department_id
ORDER BY 1 ;  -- 좀더 편하게 보기위해서, 첫번째 컬럼인 department_id 로 오름차순 한 것이다.  

GROUP BY 절을 사용하여, 그룹함수의 값을 나타내었을 때는 그룹함수의 값이 특정 조건에 해당하는 것만 추출하고자 할 때 는 WHERE 절을 사용하는 것이 아니라 , HAVING 그룹함수 조건절을 사용해야 한다.  예를 들어서 , 부서별월급합이 20000 이상인 부서만 출력해보려고 한다. 

SELECT  department_id as 부서번호 , sum ( salary ) as 부서별월급합
FROM employees 
GROUP BY  department_id
HAVING sum(salary) > =  20000   -- 부서별월급합이 20000 이상인 부서만 출력하기 위한 것. 
ORDER BY 1 ;  -- 좀더 편하게 보기위해서, 첫번째 컬럼인 department_id 로 오름차순 한 것이다.  

 다음으로 , GROUPING SETS 를 이용해서 부서별 어떠한 인원들이 존재하는지 알아보려고 한다.  부서별 인원들의 성, 이름 , 사원번호를 출력하고자 한다. 이에 대한 실행방법과 실행결과는 다음과 같다. 

SELECT department_id as 부서번호 , first_name as 성 , last_name as 이름, employee_id  as 사원번호
FROM employees
GROUP BY department_id , grouping sets( first_name ) , grouping sets( last_name ) , grouping sets ( employee_id )

 

 

 

    ----- >>>>> 요약값(rollup, cube, grouping sets) <<<<< ------
  /*
      1. rollup(a,b,c) 은 grouping sets( (a,b,c),(a,b),(a),() ) 와 같다.
    
         group by rollup(department_id, gender) 은
         group by grouping sets( (department_id, gender), (department_id), () ) 와 같다.
  
      2. cube(a,b,c) 은 grouping sets( (a,b,c),(a,b),(b,c),(a,c),(a),(b),(c),() ) 와 같다.
 
         group by cube(department_id, gender) 은
         group by grouping sets( (department_id, gender), (department_id), (gender), () ) 와 같다.
  */