SQL查询找到局部最大值

时间:2019-03-18 16:48:01

标签: sql

我正在尝试查询一个返回每个项目薪水最高的员工姓名的查询。我有3张桌子:

  1. Emp(Empno,Ename,Salary)
  2. Proj(Projno,Pname)
  3. 这两个之间的断言表称为Proj_Emp(Projno,Empno)

我查询了

    Select  pname, ename, sal
    from EMP, Proj_emp, PROJ
    where emp.empno= proj_emp.empno and proj_emp.projno=proj.projno
    and sal = (Select distinct Max(sal) from emp);

但是它只会返回一个项目,其中薪水最高的人是谁。例如

Pname       Ename   Salary
PROJECT2    KING    5000

我想和每个项目中收入最高的人一起获得所有项目。我敢打赌,我在该嵌套查询中遗漏了一些东西,但我不知道如何解决它。您能帮我吗?

我想举个例子:

Pname       Ename   Salary
PROJECT2    KING    5000
PROJECT1    KING    4000
PROJECT3    BARTOSZ 2000
PROJECT4    ANDY    1340

1 个答案:

答案 0 :(得分:2)

使用大多数dbms支持的row_number()

  with cte as
   ( select p.Pname,e.Ename,e.salary
    ,row_number()over(partition by pe.Projno order by e.salaray desc) rn
     from Proj_Emp pe join Proj p on pe.Projno=p.Projno
                       join Emp e on e.Empno=pe.Empno
) select * from cte where rn=1