하나의 테이블을 별칭 2개로 설정 후 조인 하는 거에요.. 0 3 3,030

by 금댕이 조인 [2012.03.05 14:27:31]


오라클10g SCOTT 계정의 기본 EMP 테이블을 이용한것입니다..

자기 부서의 평균 월급보다 더 많은 월급을 받는 사원들의 이름, 월급, 부서번호, 부서별 평균월급을 구하는건데요..

SELECT a.ENAME, a.DEPTNO, a.SAL, b.avg_sal
FROM EMP a, (SELECT AVG(SAL) avg_sal, DEPTNO
     FROM EMP
     GROUP BY DEPTNO) b
WHERE a.DEPTNO = b.DEPTNO
AND a.SAL > ANY (SELECT AVG(b.SAL)
  FROM EMP b
  GROUP BY b.DEPTNO)
ORDER BY a.DEPTNO

을 돌리면 아래와 같이 출력됩니다..

ENAME DEPTNO    SAL avg_sal
CLARK  10  2450  2916.666666666666666666666666666666666667
KING  10  5000  2916.666666666666666666666666666666666667
JONES   20  2975  2175
SCOTT  20  3000  2175
FORD    20  3000  2175
ALLEN  30  1600  1566.666666666666666666666666666666666667
BLAKE  30  2850  1566.666666666666666666666666666666666667

왜 맨윗칸(빨간색부분)이 출력이 되는지 모르겠어요..
'CLARK'의 월급은 부서 평균월급보다 작은데 출력이 되어서요..ㅠㅠ

이제 오라클 시작하는 입문자라 친절한 설명 부탁드려요..^^:;
by 마농 [2012.03.05 15:57:37]
변경전 : AND a.sal > ANY (SELECT AVG(b.sal) FROM emp b GROUP BY b.deptno)
변경후 : AND a.sal > b.avg_sal

by 잠만자 [2012.03.05 16:06:10]
저도 이제  오라클 갓 시작한 초보인데 같이 힘내요 ㅎㅎ


저는 이렇게 하니깐 나오더라구요.

select *
from emp a, (select deptno, avg(sal) avgsal
from emp
group by deptno) b
where a.deptno = b.deptno and
      a.sal > b.avgsal



by 금댕이 [2012.03.05 16:35:21]

정말 감사합니다~~^^
간단한거였는데 제가 거기까지 생각을 못했어요..ㅎㅎ
큰 도움이 되었습니다!!
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입