[퀴즈] 계층구조 쿼리의 이해 2 3 8,821

by 마농 계층구조쿼리 sys_connect_by_path [2009.07.14 10:25:09]


[퀴즈] 계층구조 쿼리의 이해

scott.emp 테이블을 이용해 다음 결과를 출력하는 쿼리를 작성하세요.
1. mgr 컬럼을 통해 사원을 계층적으로 표현
2. ename 항목을 계층 레벨에 따라 두칸씩 들여쓰기
3. ename 항목을 '-' 구분자로 계층 순서대로 나열
4. 급여(sal) 항목에 대해 계층구조의 하위항목에 대한 누적합계를 구함

 

EMPNO

LV

ENAME

FULL_ENAMES

SAL

SUM_SAL

계산예시

7839

1

KING KING 5000 29025 5000+10875+9400+3750

7566

2

  JONES KING-JONES 2975 10875 2975+4100+3800

7788

3

    SCOTT KING-JONES-SCOTT 3000 4100 3000+1100

7876

4

      ADAMS KING-JONES-SCOTT-ADAMS 1100 1100 1100

7902

3

    FORD KING-JONES-FORD 3000 3800 3000+800

7369

4

      SMITH KING-JONES-FORD-SMITH 800 800 800

7698

2

  BLAKE KING-BLAKE 2850 9400  

7499

3

    ALLEN KING-BLAKE-ALLEN 1600 1600  

7521

3

    WARD KING-BLAKE-WARD 1250 1250  

7654

3

    MARTIN KING-BLAKE-MARTIN 1250 1250  

7844

3

    TURNER KING-BLAKE-TURNER 1500 1500  

7900

3

    JAMES KING-BLAKE-JAMES 950 950  

7782

2

  CLARK KING-CLARK 2450 3750  

7934

3

    MILLER KING-CLARK-MILLER 1300 1300  

[정답보기] <== 트리플클릭
SELECT empno
     , LEVEL lv
     , RPAD(' ', LEVEL*2-2) || ename ename
     , LTRIM(SYS_CONNECT_BY_PATH(ename,'-'),'-') full_enames
     , sal
     , (SELECT SUM(sal)
          FROM scott.emp
         START WITH empno = a.empno
         CONNECT BY PRIOR empno = mgr
        ) sum_sal
  FROM scott.emp a
 START WITH mgr IS NULL
 CONNECT BY PRIOR empno = mgr
;

by 서성우 [2009.07.14 11:20:25]
SELECT empno
,LEVEL
,LPad(' ',(LEVEL-1)*2,' ')||ename
,SubStr(sys_connect_by_path(ename,'-'),2)
,sal
,(SELECT Sum(sal) FROM emp
START WITH ename = a.ename
CONNECT BY mgr = PRIOR empno)
FROM emp a
START WITH job = 'PRESIDENT'
CONNECT BY mgr = PRIOR empno

by 마농 [2009.07.14 15:22:48]
서성우님 잘 푸셨습니다.
한가지 아쉬운점은 ename = a.ename 이 조건이네요.
ename 은 키가 아니므로 중복가능성이 있으니 empno로 하시는것이 좋겠네요.

by 서성우 [2009.07.14 16:36:09]
앗...

이런..

너무 결과 도출만 생각하다 보니
그부분을 간과 했군요... ㅠ.ㅠ
다음엔 군더더기 없이 풀어보겠습니다 ㅠ.ㅠ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입