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차원적
계층적 질의
계층적 질의는 데이터가 포함하고 있는 관련성을 이용해서
계층적으로 데이터 상호관계를 표시해준다.
계층적으로 표시하려면 레벨을 표시해서 나타낼 수 있는데 쿼리 문장에
'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; -- 우선순위
'일단 해보는 코딩 > Oracle SQL' 카테고리의 다른 글
[오라클/SQL] Transaction - COMMIT/ROLLBACK (예제) (0) | 2022.06.09 |
---|---|
[오라클/SQL] Transaction&LOCK, View 란 무엇인가? (0) | 2022.06.09 |
[오라클/SQL] 집합연산자(UNION/UNIONALL/INTERSECT/MINUS) (0) | 2022.06.08 |
[오라클/SQL] 다중/여러개 테이블 [ANSI, Orcle] JOIN 하기 (0) | 2022.06.08 |
[오라클/SQL] JOIN - INNER/OUTER/ON (0) | 2022.06.08 |