Q1 :列出他们部门中薪水最高的员工
Q2 :列出在同一部门没有老板的员工
Q1答案)
Select e.name, Max_Sal.Sal
From Employees e
JOIN (Select d.DepartmentID,max(e.Salary) As Sal
From Employees e
JOIN Departments d ON e.DepartmentId=d.DepartmentId
Group by d.departmentID
) As Max_Sal
ON e.DepartmentId=Max_Sal.DepartmentID
and e.Salary=Max_Sal.Sal;
在Q2,我不明白这个问题,没有一个老板在同一个部门。如何知道老板在哪个部门?
发布于 2018-02-02 09:17:19
Q2 :列出在同一部门没有老板的员工
这个问题有个小窍门。
1 -加入
SELECT e.*
FROM Employees e
LEFT OUTER JOIN Employees b on e.BossId = b.EmployeeId
请注意以下事项:
Employees
表两次,但我给它们起了不同的名字。e
是每个员工;b
是该员工的老板。LEFT OUTER JOIN
来说明员工没有老板的可能性(b
将是NULL
)如果我们使用了INNER JOIN
,则结果中将忽略没有老板的员工。现在,我们有了每个员工的表,连接到他们的老板。但我们仍然需要根据请求过滤列表。
2 -过滤器
员工可能处于以下三种状态:
重要的是要认识到,请求的输出需要同时包含情景3中的雇员和情景1中的雇员。我们应该只省略情景2中的雇员。
使用伪SQL,这意味着您的查询应该如下所示:
SELECT *
FROM the_data
WHERE
situation_1_applies
OR
situation_3_applies
单独的过滤器并不是很难编写:
SELECT e.*
FROM Employees e
LEFT OUTER JOIN Employees b on e.BossId = b.EmployeeId
WHERE
-- situation_1_applies
-- When b is NULL, all of b's columns are NULL
b.DepartmentId is NULL
OR
-- situation_3_applies
b.DepartmentId <> e.DepartmentId
发布于 2018-02-02 08:22:55
在同一个部门中没有老板,所以您可以认为Employees表中的bossID为空。所以你可以为一个组写一个SQL查询,所有拥有相同部门的人的bossID都是null :),所以这不是真实的,因为员工必须有一个老板(不是null),如果你给我显示表的完整字段,也许我会确切地告诉你我的答案。
另一方面,你可以想象,他们有相同的bossID,所以你的任务将为一组人编写一个bossID查询,所有人都有相同的SQL,但他们有不同的部门。
我有一个示例MySQL查询(针对相同的bossID但不同的部门):
SELECT * FROM Employees as e
INNER JOIN department d ON d.departmentId = e.deparmentId
WHERE e.DepartmentID in (
SELECT DepartmentID
FROM Employees
GROUP BY DepartmentID
HAVING COUNT(*) = 1 /* it's fixed */
) AND e.BossID = 2 /* any value of bossID you want, you can join it with Boss table */
=====更新我的答案=====
我对这个问题有一个想法。
任何人都必须有一个boss,并且boss在表SQL中也是一个雇员。
' employeeName ' department name ' boss name
--------------------------------------------------------
' King ' Director '
' Victor ' Marketing ' King
' Angela ' Product ' King
' Ken ' Marketing ' Victor
' LaLa ' Marketing ' Victor
' Jery ' Business ' Ken
因为没有老板在同一个部门->,他们的部门不能有他们的老板。将结果=>为下表:
' employeeName ' department name ' boss name
--------------------------------------------------------
' King ' Director '
' Victor ' Marketing ' King
' Angela ' Product ' King
' Jery ' Business ' Ken
如果你有正确的方法来理解这个问题,你可以在这里发帖,让每个人都能理解。谢谢
https://stackoverflow.com/questions/48577663
复制相似问题