안녕하세요~~ 오라클 DB 쿼리 질문을 드립니다~~ 0

by 달빛그림자 [SQL Query] [2022.03.12 00:18:44]


안녕하세요.. 오라클 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~~~~ 

 

by 마농 [2022.03.13 22:16:47]
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
;

 


by 달빛그림자 [2022.03.14 10:19:20]

와~~~ 마농님..  일주일 넘게 고민했던 문제가 해결 되었네요~~~ 정말 고맙고 감사합니다~~~

이 은혜를 어찌해야할지요~~~  ^^

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입