各部門で最高の給与の従業員の問題を解決するSQLステートメント

部門の給与が最も高い従業員の
Employeeテーブルには、すべての従業員情報が含まれており、各従業員には、対応するID、給与、および部門IDがあります。
ここに画像の説明を挿入
Departmentテーブルには、会社のすべての部門に関する情報が含まれています。
ここに画像の説明を挿入
SQLクエリを記述して、各部門で最も給与の高い従業員を見つけます。たとえば、上記の表によると、マックスはIT部門で最高の給与を、ヘンリーはセールス部門で最高の給与を持っています。
ここに画像の説明を挿入
基本的な考え方:

1)最初に、従業員テーブルの各部門の最高の給与を照会し、部門IDと最高の給与を含むtmpテーブルを取得します。

2)従業員テーブルとtmpテーブルを一緒に確立し、部門で最高の給与を持つ従業員の名前、部門ID、および最大給与を照会して、tmp2テーブルを取得します。

3)部門テーブルとtmp2テーブルを接続して、部門IDに対応する部門名を照会します

2番目のステップは問題の鍵です。ここでのフィルター条件は次のとおりです。

1)従業員は対応する部門に属している必要があるため、接続条件は部門IDが等しいことです。

2)従業員の給与は対応する部門で最高であるため、クエリ条件はe.salary = t.max_salaryです。

d.name
as Department、j.name as Employee、max_salary as salary from
department d join
(select e.name、t.did、t.max_salary from#tmp2表
employee e join
(select departmentid as did、max(salary)as max_salary as employee group by departmentid)t#tmp1表
on e.departmentid = t.did
where e.salary = t.max_salary
)j
on d.id = j.did;

部門の給与が上位3位以内のすべての従業員

従業員テーブルと部門テーブルの構造は、前の例と同じです。

SQLクエリを記述して、上位3つの給与を受け取った各部門のすべての従業員を検索します。たとえば、上記の表に従って、クエリ結果が返されます。
ここに画像の説明を挿入
アイデア:
IT部門では、マックスが最高の給与を、ランディとジョーが2番目に高い給与を、ウィルの給与が3番目にランクされました。販売部門(Sales)の従業員は2人だけで、給与が最も高いのはヘンリーで、2番目に高いのはサムです。
注:同じ部門に所属し、同じ給与を獲得し、上位3名に入る2人の従業員がいる場合、それらは一緒に照会される必要があり、1つのランキングのみを占めます。
基本的なアイデア:
1)そのような従業員を見つけます:同じ部門に所属し、給与が彼より高い従業員の数が3(3ではない)を超えていないこと、その名前、給与、部門IDを確認して、tmpテーブルを取得します
。2)リンクtmpとdeparmentテーブルを設定して、部門の名前を照会します。
sqlステートメントは次のとおりです
。d.nameをDepartmentとして、t.nameをEmployeeとして、t.SalaryをSalaryとして
部門d から結合し
ます(select name、salary、departmentid from employee e1 where 3># "number" does not超え3、hereここで使用) count(distinct(salary))。これにより、同じ給与を持つすべての従業員が、
従業員e2から1つのランクのみを選択するようにします(select count(distinct(salary))
where e1.departmentid = e2.departmentid #In同じ部署
とe1.salary <e2.salary))#給与は対象の従業員より少ない
on d.id = t.departmentid
order by Department、Salary desc;

おすすめ

転載: blog.csdn.net/Dreamy_zsy/article/details/105501181