200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > SQL语句解决各部门工资最高员工问题

SQL语句解决各部门工资最高员工问题

时间:2022-01-07 23:37:38

相关推荐

SQL语句解决各部门工资最高员工问题

部门工资最高的员工

Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id。

Department 表包含公司所有部门的信息。

编写一个 SQL 查询,找出每个部门工资最高的员工。例如,根据上述给定的表格,Max 在 IT 部门有最高工资,Henry 在 Sales 部门有最高工资。

基本思路:

1)首先在employee表中查询出各部门的最高工资,得到tmp表,它包含部门id和最高工资2)连立employee表与tmp表,查询出工资在所在部门最高的员工姓名、部门id和最高工资,得到tmp2表。3)连接department表与 tmp2表,查询出部门id对应的部门名称

第二步是问题的关键,这里的过滤条件是:

1)员工要属于对应部门,所以连接条件是部门id相等;2)员工的工资在对应的部门中是最高的,所以查询条件是e.salary = t.max_salary

完整的sql语句如下:

select 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 from employee group by departmentid) t #tmp1表on e.departmentid = t.didwhere e.salary = t.max_salary) j on d.id = j.did;

部门工资前三高的所有员工

employee表与department表的结构和上例是一样的。

编写一个 SQL 查询,找出每个部门获得前三高工资的所有员工。例如,根据上述给定的表,查询结果应返回:

思路:

IT 部门中,Max 获得了最高的工资,Randy 和 Joe 都拿到了第二高的工资,Will 的工资排第三。销售部门(Sales)只有两名员工,Henry 的工资最高,Sam 的工资排第二。

注意:这里如果有两个员工处于相同的部门拿到相同的工资且都在前三,是要一并查询出来而且它们只占用一个排名。

基本思路:

1)查询出这样的员工:处于同一个部门且工资比他高的员工人数不超过3(不能为3),查询出它的姓名,工资,部门id,得到tmp表;2)联立tmp与deparment表,查询出部门的名称。

sql语句如下:

select d.name as Department,t.name as Employee,t.Salary as Salary from department d join (select name,salary,departmentid from employee e1 where 3 > #“人数”不超过3,这里用了count(distinct(salary)),从而保证了所有相同工资的员工只会占用一个排名(select count(distinct(salary)) from employee e2 where e1.departmentid = e2.departmentid #处于同一个部门and e1.salary < e2.salary)) #工资少于目标员工on d.id = t.departmentidorder by Department,Salary desc;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。