首页 > 解决方案 > 如何在sql中选择比他们各自部门的领导赚更多钱的工人?

问题描述

我有下表:

+---------------------------------------------------+
| ID EMPNAME DEPARTMENT ROLE       SALARY   EXTRA   |
| 1  brian   10         sales      2000     500     |
| 2  jenny   10         leader     3000     100     |
| 3  sam     20         office     1500     500     |
| 4  cory    20         leader     1200     300     |
| 5  tifa    30         custservice4000     1000    |
| 6  sammy   30         leader     3000     200     |
| 7 anne     30         sales      4500     200     |
+---------------------------------------------------+

我的工作是在每个角色中找到比他们的领导(薪水+额外)赚更多的人。然后,我将显示那个人的idempnamedepartment。我需要一种方法来比较每个部门内角色之间的薪水+额外费用(额外费用是他们每年的奖金)。我尝试过类似以下代码的方法,但它不起作用,它没有正确计算最高与领导者的关系。

SELECT a.id, a.empname, a.department
FROM MyTable a
JOIN (SELECT MAX(Salary + extra) As Highest, Dept FROM MyTable GROUP BY Dept) b
ON a.Dept = b.Dept && (a.Salary + a.extra) = b.Highest

我如何在标准的前三列中显示他们比特定部门的领导所做的更多?上表应输出以下内容:

+-----------------------+
| ID EMPNAME DEPARTMENT |
| 3  sam     20         |
| 5  tifa    30         |
| 7  anne    30         |
+-----------------------+

这是在 sql developer 中完成的。

编辑:忘了补充一些EXTRA可能的值NULL

标签: mysqlsqlselect

解决方案


嗯。. . 我在想一个相关的子查询:

select t.*
from mytable t
where (t.salary + t.extra) > (select t2.salary + t2.extra
                              from mytable t2
                              where t2.department = t.department and
                                    t2.role = 'leader'
                             );

推荐阅读