Mysql 列出因其专业技能而获得最高工资的任何员工的详细信息
问题是: 列出因其专业技能而获得最高工资的任何员工的详细信息 需要使用Employee和V1表解决(V1是使用Employee表创建的视图) :第一个表是employee,第二个表是V1 使用下面的查询,我得到了它旁边的所有正确输出,与Tiger工资75000匹配,而它应该只显示Tiger工资90000。(两者都有) 预期结果:Mysql 列出因其专业技能而获得最高工资的任何员工的详细信息,mysql,sql,Mysql,Sql,问题是: 列出因其专业技能而获得最高工资的任何员工的详细信息 需要使用Employee和V1表解决(V1是使用Employee表创建的视图) :第一个表是employee,第二个表是V1 使用下面的查询,我得到了它旁边的所有正确输出,与Tiger工资75000匹配,而它应该只显示Tiger工资90000。(两者都有) 预期结果: EmpNo EmpName Species ZooName Salary Gender 3008 Jill
EmpNo EmpName Species ZooName Salary Gender
3008 Jill Alligator Whipsnade Park 40000.00 F
3020 Red Bear Red Star 120000.00 M
3004 Mary Lion Riverdale 110000.00 M
3019 Alice Panda Pandaville 67000.00 F
3013 May Rhino Boston City Zo 75000.00 F
3006 Henrietta Tiger Whipsnade Park 90000.00 F
EmpNo EmpName Species ZooName Salary Gender
3008 Jill Alligator Whipsnade Park 40000.00 F
3020 Red Bear Red Star 120000.00 M
3004 Mary Lion Riverdale 110000.00 M
3019 Alice Panda Pandaville 67000.00 F
3013 May Rhino Boston City Zoo 75000.00 F
3003 John Tiger Riverdale 75000.00 M <-- Issue
3006 Henrietta Tiger Whipsnade Park 90000.00 F
当前查询:
select e.*
from employee e
join v1 on e.Species = v1.Species
where e.Salary in (select salarymax from v1)
运行上面的查询时得到的实际结果:
EmpNo EmpName Species ZooName Salary Gender
3008 Jill Alligator Whipsnade Park 40000.00 F
3020 Red Bear Red Star 120000.00 M
3004 Mary Lion Riverdale 110000.00 M
3019 Alice Panda Pandaville 67000.00 F
3013 May Rhino Boston City Zo 75000.00 F
3006 Henrietta Tiger Whipsnade Park 90000.00 F
EmpNo EmpName Species ZooName Salary Gender
3008 Jill Alligator Whipsnade Park 40000.00 F
3020 Red Bear Red Star 120000.00 M
3004 Mary Lion Riverdale 110000.00 M
3019 Alice Panda Pandaville 67000.00 F
3013 May Rhino Boston City Zoo 75000.00 F
3003 John Tiger Riverdale 75000.00 M <-- Issue
3006 Henrietta Tiger Whipsnade Park 90000.00 F
EmpNo EmpName性别
3008吉尔鳄鱼惠普斯纳德公园40000.00 F
3020红熊红星120000.00米
3004玛丽·利昂·里弗代尔110000.00米
3019爱丽丝熊猫潘达维尔67000.00 F
3013年5月犀牛波士顿城市动物园75000.00 F
3003约翰·泰格·里弗代尔75000.00米您正在寻找一名对每种物种工资最高的员工。您可以通过一个不存在
条件和一个相关子查询来实现这一点:
SELECT e.*
FROM employee e
WHERE NOT EXISTS (
SELECT 1
FROM employee e1
WHERE e1.species = e.species AND e1.salary > e.salary
)
如果存在顶级关系(即如果一个以上的员工拥有给定种类的相同最高工资),则将显示所有关系
注意:我并不认为使用v1
视图有什么意义,所以我没有
从MySQL 8.0开始,窗口功能开始发挥作用,这可以以更高效的方式解决:
SELECT *
FROM (
SELECT e.*, RANK() OVER(PARTITION BY species ORDER BY salary DESC) rn
FROM employee
) x WHERE rn = 1
如果确实要使用v1
,则需要更改加入条件。考虑:
SELECT e.*
FROM employee e
INNER JOIN join v1 on e.Species = v1.Species AND e.Salary = v1.salarymax
我们还必须使用V1来解决这个问题,就像将V1与员工合并一样