1

それぞれの部門の平均給与の 90% を超える給与を持つ2 人以上の従業員がいる部門名 (従業員名を含む) を検索するための SQL クエリを生成しようとしています。私の SQL コードは正常に動作しています。構文エラーはありませんが、出力に追加のデータが表示されます。表は以下の通りです

ジョーンズ会計 3000
スチール会計2500
ウィルソンリサーチ3000
ウルフリサーチ2500
リーリサーチ2400
ランカスター販売 2000
ジャクソンセールス2500
フィッシャー販売 3000
アダムズ IT 2000
ミラー IT 1000
スコット IT 2500
スミス IT 2900
キングエグゼクティブ5000
JOST エグゼクティブ 4500
クラーク エグゼクティブ 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人以上の従業員がいる部門を探しています

4

2 に答える 2

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% を超える従業員のみを表示する場合は、外側の where 句に別の条件を追加して、その従業員のみを選択する必要があります。

于 2012-08-04T14:16:44.760 に答える