일단 해보는 코딩/Oracle SQL

[오라클/SQL] GROUP BY (ROLLUP/CUBE), 계층적 질의

eun_zoey2 2022. 6. 9. 19:44
728x90

GROUP BY 함수 확장

GROUP BY ROLLUP() 과 GROUP BY CUBE() 함수가 있다.

 

GROUP BY ROLLUP()은 그룹화 할 조건이 있으면 우측으로부터 하나씩 제외해 나아가면서 그 결과를 반환하는 기능을 한다.

직무별 평균급여와 부서별 평균 급여를 구하는데 사용될 수 있다.

GROUP BY CUBE() 는 3차원 적인 분석을 가능하게 해주는 기능이다.

전체평균 급여,직무별 평균급여와 부서별 평균급여 대해서 부서별 평균급여를 함께 쿼리하게 해서 3차원적으로 작업을 수행시킬 수 있다.

.

 

Q. 부서명, 직무, 직무별 평균 급여와 부서별 평균급여를 보이시오. (ROLLUP, CUBE)

select d.department_name, j.job_title, round(avg(salary),2) AS SAG_SAL
from employees e JOIN departments d
on d.department_id = e.department_id
JOIN jobs j
on j.job_id = e.job_id
1.group by department_name, job_title;			-- , 를 찍어서 그룹을 2개 만듦
2.group by rollup(department_name, job_title);		-- 직무별 부서의 평균하고 부서별의 평균급여
3.group by cube(department_name, job_title);		-- 3차원적

           1                                                                                                                              2
      3

계층적 질의

 

 

 

 

 

계층적 질의는 데이터가 포함하고 있는 관련성을 이용해서

계층적으로 데이터 상호관계를 표시해준다.

계층적으로 표시하려면 레벨을 표시해서 나타낼 수 있는데 쿼리 문장에 

'start with 시작_점  connect by 논리_식' 으로 사용한다.

 

 

 

 

 

-- 계층적 관련성 여부를 확인	

select employee_id, last_name, manager_id from employees
order by employee_id;										


-- 회사내의 조직도 관계도를 확인할 경우,

select lpad(emplouyee_id, level*3, '-') AS EMP_LEVEL, last_name, manager_id from employees   -- 왼쪽의 빈자리를 채우기
start with employee_id = 100 					-- King이 100
connect by prior employee_id = manager_id;			-- 우선순위