안녕하세요.. 오라클 DB 쿼리 질문 드립니다~~~
--------------------------------------
SELECT JOB AS 직업, MAX(SAL) - MIN(SAL) AS 직업연봉차이
FROM EMP
GROUP BY JOB
UNION ALL
SELECT B.DNAME AS 부서, MAX(SAL) - MIN(SAL) AS 부서연봉차이
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY B.DNAME;
-------------------------------------
상기 SQL 문장을 이용하여 아래 그림에서 1번 결과와 2번 결과 그리고.. UNION ALL 을 삽입하여 3번 결과가 나옵니다.
제가 구현을 하고 싶은건 마지막 4번 결과를 나오게 하고 싶습니다..
어떻게 구현을 하면 되는지요??? (제가 이것저것 다해 보았는데 잘 안되어서요~~~)
고수님들께 자문을 구합니다. Please~~~~
SELECT rn
, MIN(직업) 직업
, MIN(직업연봉차이) 직업연봉차이
, MIN(부서) 부서
, MIN(부서연봉차이) 부서연봉차이
FROM (SELECT ROW_NUMBER() OVER(ORDER BY MAX(sal) - MIN(sal) DESC, job) rn
, job 직업
, MAX(sal) - MIN(sal) 직업연봉차이
, null 부서
, null 부서연봉차이
FROM emp
GROUP BY job
UNION ALL
SELECT ROW_NUMBER() OVER(ORDER BY MAX(e.sal) - MIN(e.sal) DESC, d.dname) rn
, null 직업
, null 직업연봉차이
, d.dname 부서
, MAX(e.sal) - MIN(e.sal) 부서연봉차이
FROM emp e
, dept d
WHERE e.deptno = d.deptno
GROUP BY d.dname
)
GROUP BY rn
ORDER BY rn
;
SELECT rn
, MIN(DECODE(g, 0, job )) 직업
, MIN(DECODE(g, 0, s )) 직업연봉차이
, MIN(DECODE(g, 1, dname)) 부서
, MIN(DECODE(g, 1, s )) 부서연봉차이
FROM (SELECT e.job
, d.dname
, MAX(e.sal) - MIN(e.sal) s
, GROUPING(e.job) g
, ROW_NUMBER() OVER(PARTITION BY GROUPING(e.job)
ORDER BY MAX(e.sal) - MIN(e.sal) DESC, e.job, d.dname) rn
FROM emp e
, dept d
WHERE e.deptno = d.deptno
GROUP BY GROUPING SETS (e.job, d.dname)
)
GROUP BY rn
ORDER BY rn
;
와~~~ 마농님.. 일주일 넘게 고민했던 문제가 해결 되었네요~~~ 정말 고맙고 감사합니다~~~
이 은혜를 어찌해야할지요~~~ ^^