我对SQL还是很陌生,我正在为Uni数据库课程分配作业。 请求是在我的数据库中找到赚取每个部门(职位)最低工资的雇员的姓名。 EMPLOYEES表包含每个雇员的姓名,代码,工作和工资。
这是我到目前为止编写的查询,尽管它为我提供了所有正确的名称,但它会抛出一些不该存在的名称。我的想法是捕捉每个工作的最低工资(使用子查询,它实际上似乎还不错),然后将其与完整的EMPLOYEES表一起加入,以获取名称。我在做什么错了?
SELECT E.EMP_NAME
FROM EMPLOYEES AS E
INNER JOIN (SELECT MIN(WAGE)AS W
FROM EMPLOYEES
GROUP BY JOB)AS EMP
ON E.WAGE=EMP.W
ORDER BY E.JOB;
答案 0 :(得分:0)
您只是加入工资。您还需要参加工作:
SELECT E.EMP_NAME
FROM EMPLOYEES E JOIN
(SELECT E2.JOB, MIN(E2.WAGE) AS MIN_WAGE
FROM EMPLOYEES E2
GROUP BY E2.JOB
) w
ON E.WAGE = W.MIN_WAGE AND E.JOB = W.JOB
ORDER BY E.JOB;
否则,您将获得与另一工作的最低要求相匹配的员工,而不是您想要的。
一些注意事项:
W
不是很有意义。我个人将使用相关子查询来编写它:
select e.*
from employees e
where e.wage = (select min(e2.wage) from employees e2 where e2.job = e.job);