问题是:
列出所有物种专业知识薪水最高的员工的员工详细信息
要使用Employee和V1表解决此问题(v1是使用employee表创建的视图)
https://imgur.com/a/chIFHmT:第一个表是员工,第二个表是V1
使用以下查询为我提供了所有正确的输出,它与75,000的Tiger薪水相匹配,而它只应显示90000的Tiger薪水。(它同时显示了两者)
预期结果:
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
当前查询:
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 Zoo 75000.00 F
3003 John Tiger Riverdale 75000.00 M <-- Issue
3006 Henrietta Tiger Whipsnade Park 90000.00 F
答案 0 :(得分:1)
您正在寻找一个薪金最高的员工。您只需使用NOT EXISTS
条件和相关的子查询即可实现:
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
,则需要更改JOIN
条件。考虑:
SELECT e.*
FROM employee e
INNER JOIN join v1 on e.Species = v1.Species AND e.Salary = v1.salarymax