2012-08-04 5 views
1

직원이 2 명 이상인 부서 이름 (직원 이름 포함)을 찾기 위해 SQL 쿼리를 생성하려고합니다. 그 부서의 평균 급여의 90 % 이상인 급여. 내 SQL 코드가 정상적으로 작동하지만 구문 오류가 없지만 출력에서 ​​추가 데이터가 제공됩니다. 표는 다음과 같습니다.각 부서의 평균 급여가 2 명 이상이고 급여가 90 %를 넘는 부서 이름 (직원 이름 포함)

 
JONES   ACCOUNTING 3000 
STEEL   ACCOUNTING 2500 
WILSON  RESEARCH  3000 
WOLFE   RESEARCH  2500 
LEE   RESEARCH  2400 
LANCASTER  SALES   2000 
JACKSON  SALES   2500 
FISHER  SALES   3000 
ADAMS   IT   2000 
MILLER  IT   1000 
SCOTT   IT   2500 
SMITH   IT   2900 
KING   EXECUTIVE  5000 
JOST   EXECUTIVE  4500 
CLARK   EXECUTIVE  4000 

내 코드는 다음과 같습니다.

Select department_name , employee_name 
from department d , employee e 
where e.department_id = d.department_id 
and (SELECT COUNT(*) 
    FROM Employee E 
    WHERE E.department_ID = D.department_ID) > 2  
    and salary > 
    0.9*(SELECT ROUND(AVG(salary),2) 
    FROM employee e_inner 
    WHERE e_inner.department_id = e.department_id); 

나는 내 코드 부서의 평균 급여의 2 명 이상의 직원 급여> 90 %와 부서의 값을 반환하는 것을 알 수 있습니다. 나는 그 급여 부서의 평균 급여의 90 %를 2 명 이상 직원 과 부서를 찾고 있어요 반면

+0

대소 문자를 구분합니까? 전자와 다른 앨리어스가 필요합니까? – seancarmody

+0

대소 문자를 구분하지 않습니다. 내 결과물은 나에게 2 개의 부서 만 제공해야하며,이 단계에서 4 점을주게됩니다. –

답변

1

나는이 그것을해야한다고 생각 :

select * 
from (
    select department_name, 
     employee_name, 
     sum(case when salary > avg_dept_sal * 0.9 then 1 else 0 end) over (partition by department_id) as greater_count 
    from (
    select d.department_name, 
      e.department_id, 
      e.employee_name, 
      e.salary, 
      count(*) over (partition by e.department_id) as dept_count, 
      avg(salary) over (partition by e.department_id) as avg_dept_sal 
    from employee e 
     join department d on e.department_id = d.department_id 
) t1 
) t2 
where greater_count >= 2 

이 그 부서의 모든 직원을 반환합니다 . 급여가 실제로 90 %보다 큰 직원 만 보려는 경우 외부 조건 절에 다른 조건을 추가하여 해당 조건을 선택해야합니다.

+0

@ Gary1266 : 내 편집 참조. Btw 이것이 숙제라면 우리에게 그렇게 말하십시오. –

+0

표준 txtbook의 모든 장의 끝 부분에 실습 예제가 있지만, SQL 코드 작성을 시작한 이래로 저는 약간 어려움을 겪고 있습니다. 이 질문의 결과는 다음과 같습니다 : IT 연구 <이, 윌슨, 울프> 도움 주셔서 감사합니다 –

0

아래 명시된 쿼리는 분석을 사용하지 않고 원하는 결과를 제공합니다. Simple & 마치 영어처럼 쉽습니다. 종업원 E2에서

로서 T와 **

  • *
  • (
    급여> (AVG (급여 선택 직원 E1)에서 empname, DEPTNO, 급여 선택 * 0.9 여기서
    E2. deptno = e1.deptno 그룹 (deptno가 count (empname)> 2)을 가짐) 을 선택하십시오. T.empname, deptname, T에서 급여, 부서
    T.deptno = department.deptno; *

    **

나는 Oracle 데이터베이스에 성공적으로 쿼리를 실행.

관련 문제