mysql - 与 SQL 查询作斗争
问题描述
我对 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;
解决方案
你只是在工资上加入。您还需要加入该工作:
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);
推荐阅读
- button - 创建几个进行 REST API 调用的按钮
- r - 计算可能包含 NA / 缺失值的列值的组合(不是排列)
- python - 有没有办法在 cpanel 上部署 fastapi 应用程序?
- angular - 如何在角度 8 的同一页面中保持任何点击的滚动位置
- python-3.x - 有没有办法确定 k 的值以选择文本摘要中的前 k 个句子
- android - 即使使用相同的 debug.keystore 文件,签名也不匹配(Android 和 Unity)
- c - 有没有办法让公开电话正常工作?
- sql - 从 PowerShell 命令执行 SQL 时如何参数化登录
- reactjs - 在 Vercel 上部署 react-app 时遇到问题。构建错误
- python - pip install discord for python时出错