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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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 在SQL中从多对多关系中查找最大值_Mysql_Sql - Fatal编程技术网

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;