苦苦挣扎的SQL查询

时间:2018-11-17 16:38:32

标签: mysql sql join select min

我对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; 

1 个答案:

答案 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; 

否则,您将获得与另一工作的最低要求相匹配的员工,而不是您想要的。

一些注意事项:

  • 您正在学习SQL,因此您应该为每个表赋予一个别名,并将其用于所有列引用。
  • 您应为列赋予别名。 W不是很有意义。

我个人将使用相关子查询来编写它:

select e.*
from employees e
where e.wage = (select min(e2.wage) from employees e2 where e2.job = e.job);