我希望从员工表中获得员工的详细信息,这些员工表明工资最高

时间:2014-05-21 14:56:23

标签: sql sql-server

我有一个名为employee table的表。我想得到从各自工作中获得最高工资的员工的姓名。

我尝试过以下查询。

select ename from employee
where sal in 
(select job,max(sal) from employee
group by job)

但它出错了

  

Msg 116,Level 16,State 1,Line 4只有一个表达式   在未引入子查询时在选择列表中指定   存在。

4 个答案:

答案 0 :(得分:2)

错误告诉您子选择返回具有两个值(job,max(sal))的行,并且您正在尝试将薪水与该匹配。您只需要返回一个值,以便能够使用'value in(subselect)',因为无法确定返回哪个值与您的值匹配。

您可以尝试使用以下名称:

select e1.ename from employee e1
join (select job, max(value) as m from employee
    group by job) as e2 on e1.job = e2.job
where e1.value = e2.m

这样做是使用select作为包含每个作业及其最高工资的临时连接表,并根据员工的工作将员工表与它连接,并且只有在员工的工资等于最高工资时才选择员工他的工作

答案 1 :(得分:0)

您可以将employee表连接回自身,连接条件是薪水高于当前行,然后排除匹配的所有行

SELECT * 
  FROM Employee E1
  LEFT JOIN Employee E2 ON (E2.job = E1.job and E2.salary > E1.salary)
WHERE E2.name is null

这将为您提供所有员工的清单,这些员工在同一份工作中没有其他人有更高的薪水。

答案 2 :(得分:0)

您也可以使用这个更简单的查询:

select ename, job, sal from emp where sal in(select max(sal) from emp group by job);

答案 3 :(得分:0)

此查询将以工作方式返回薪酬最高的员工:

select job,First_name,Last_name,salary 
from Employee 
where salary IN 
    (
    select MAX(salary) 
    from Employee 
    GROUP BY job
    );