Mysql 在SQL中从多对多关系中查找最大值
我有三张桌子-Mysql 在SQL中从多对多关系中查找最大值,mysql,sql,Mysql,Sql,我有三张桌子- 员工-具有列-id、姓名、工资 项目-具有列-id、名称、预算 赋值-有列-empId,pid (这些列分别指员工和项目) 我希望SQL查询返回每个项目中工资最高的员工 结果集应该类似于- Project id|Employee Name|Salary 1 | B | 2000 2 | D | 4000 3 | C | 500 我编写了以下SQL。但是它把所有的行都还给了
员工-具有列-id、姓名、工资
项目-具有列-id、名称、预算
赋值-有列-empId,pid (这些列分别指员工和项目) 我希望SQL查询返回每个项目中工资最高的员工 结果集应该类似于-
Project id|Employee Name|Salary
1 | B | 2000
2 | D | 4000
3 | C | 500
我编写了以下SQL。但是它把所有的行都还给了我。有什么不对劲吗
select p.id, p.name, e.id, e.name, e.salary
FROM
(
select e.id, MAX(e.salary)
from employee e
join assignment a on e.id = a.empId
join project p on p.id = a.pid
group by e.id
) as EmpMAX
join Employee e on EmpMAX.id = e.id
join assignment a on a.empId = e.id
join project p on p.id = a.pid
我参考了下面的链接来获得SQL
我使用的是MySQL可能最简单的方法是
子字符串\u index()
`group\u concat()`技巧:
注意:如果有多个员工的工资相同,则只选择一名员工
SELECT p.*,e.*
FROM project p
JOIN assignment a
ON a.pid = p.id
JOIN employee e
ON e.id = a.empid
JOIN
( SELECT p.id
, MAX(salary) max_salary
FROM project p
JOIN assignment a
ON a.pid = p.id
JOIN employee e
ON e.id = a.empid
GROUP
BY id
) x
ON x.id = p.id
AND max_salary = e.salary;
注意:如果有多个员工具有相同(最高)工资,则选择多个员工
select p.projid,
substring_index(group_concat(e.name order by e.salary desc), ',', 1) as empname,
max(salary)
from employee e join
assignment a
on e.id = a.empId
group by p.projid;
SELECT p.*,e.*
FROM project p
JOIN assignment a
ON a.pid = p.id
JOIN employee e
ON e.id = a.empid
JOIN
( SELECT p.id
, MAX(salary) max_salary
FROM project p
JOIN assignment a
ON a.pid = p.id
JOIN employee e
ON e.id = a.empid
GROUP
BY id
) x
ON x.id = p.id
AND max_salary = e.salary;