본문 바로가기

빅데이터과정/SQL

#8_140624_with

728x90

# WITH



with 절 복합 query 내에서 동일한 select 문이 반복되는 경우 쓰임.
with 절의 장점

           두번이상 반복되고 있는 쿼리가 있는 SQL의 성능을 높일 수 있다
oracle temporary tablespace(임시저장영역아래의 데이터를 저장한다


문제319. 직업직업별 최대월급을 출력하는데 직업별 최대월급이 직업별 최대월급들에 대한 평균값보다 더 큰 것만 출력하시오

#튜닝 전
SELECT job, MAX(sal)
FROM EMP
GROUP BY job
HAVING MAX(sal) > (SELECT AVG(MAX(sal)) FROM EMP GROUP BY job);

#튜닝 후
WITH job_maxsal AS (SELECT job, MAX(sal) 최대값 FROM EMP GROUP BY job)
SELECT job, 최대값
FROM job_maxsal


WHERE 최대값 > (SELECT AVG(최대값) FROM job_maxsal);


SELECT job, MAX(sal) 최대값 FROM EMP GROUP BY job;
실행결과





문제320. 아래의 SQL을 with절로 변경하시오

SELECT d.loc, SUM(e.sal)
FROM EMP e, DEPT d
WHERE e.deptno=d.deptno
group BY d.loc
HAVING SUM(e.sal) > (SELECT AVG(SUM(e.sal))*0.2 FROM EMP e, DEPT d WHERE e.deptno=d.deptno GROUP BY d.loc);

WITH loc_sumsal AS (SELECT d.loc, SUM(e.sal) 토탈 FROM EMP e, DEPT d WHERE e.deptno=d.deptno group BY d.loc)
SELECT loc, 토탈
FROM loc_sumsal
WHERE 토탈 > (SELECT AVG(토탈)*0.2 FROM loc_sumsal);

문제321. 직업직업별인원수를 출력하는데 직업별 인원수의 평균값보다 더 큰것만 출력하시오

WITH job_avgcnt AS (SELECT job, COUNT(*) 인원수 FROM EMP GROUP BY job)
SELECT job, 인원수
FROM job_avgcnt


WHERE 인원수 > (SELECT AVG(인원수) FROM job_avgcnt);


'빅데이터과정 > SQL ' 카테고리의 다른 글

#43_140812_계층적질의문  (0) 2014.08.12
#8_140624_정규식 함수  (0) 2014.07.14
#7_140623_DCL(Data Control Language)  (0) 2014.07.14
#7_140623_CORRELATED SUBQUERY  (0) 2014.07.14
#7_140623_마지막 문제  (0) 2014.07.14