我有两个表Employee和Dept,如下所示
EIN | ENAME | Salary | DeptID
1 | Ravi | 500 | 10
2 | Krishna | 1000 | 20
3 | Kiran | 1500 | 20
DeptID | DeptName
10 | IT
20 | Finance
我希望输出作为员工以及由部门获得最高工资组的Deptname
答案 0 :(得分:0)
这是一个不使用分析函数的选项:
SELECT e.ENAME,
COALESCE(d.DeptName, 'NA') AS DeptName,
t.max_salary
FROM Employee e
LEFT JOIN Dept d
ON e.DeptID = d.DeptID
INNER JOIN
(
SELECT DeptID, MAX(SALARY) AS max_salary
FROM Employee
GROUP BY DeptId
) t
ON e.DeptID = t.DeptID AND
e.Salary = t.max_salary
请注意,如果多个员工在给定部门中具有最高薪水,则此查询将返回所有关联。如果没有进一步的信息,这似乎是合理的,但无法区分一个员工与另一个员工。
<强>更新强>
您还可以使用包含相关子查询的WHERE
子句,而不是像上面给出的那样连接到(非相关)子查询。这是什么样的:
SELECT e.ENAME,
COALESCE(d.DeptName, 'NA') AS DeptName,
e.Salary
FROM Employee e
LEFT JOIN Dept d
ON e.DeptID = d.DeptID
WHERE e.Salary = (SELECT MAX(t.Salary) FROM Employee t WHERE t.DeptID = e.DeptID)
但是,我建议使用第一个选项,因为它可能比相关子查询选项表现更好。