Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 列出因其专业技能而获得最高工资的任何员工的详细信息_Mysql_Sql - Fatal编程技术网

Mysql 列出因其专业技能而获得最高工资的任何员工的详细信息

Mysql 列出因其专业技能而获得最高工资的任何员工的详细信息,mysql,sql,Mysql,Sql,问题是: 列出因其专业技能而获得最高工资的任何员工的详细信息 需要使用Employee和V1表解决(V1是使用Employee表创建的视图) :第一个表是employee,第二个表是V1 使用下面的查询,我得到了它旁边的所有正确输出,与Tiger工资75000匹配,而它应该只显示Tiger工资90000。(两者都有) 预期结果: EmpNo EmpName Species ZooName Salary Gender 3008 Jill

问题是:

列出因其专业技能而获得最高工资的任何员工的详细信息

需要使用Employee和V1表解决(V1是使用Employee表创建的视图)

:第一个表是employee,第二个表是V1

使用下面的查询,我得到了它旁边的所有正确输出,与Tiger工资75000匹配,而它应该只显示Tiger工资90000。(两者都有)

预期结果:

 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与员工合并一样