我有一个名为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只有一个表达式 在未引入子查询时在选择列表中指定 存在。
答案 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
);