Mysql 单表上的SQL查询
我需要一个SQL查询来解决以下问题Mysql 单表上的SQL查询,mysql,sql,Mysql,Sql,我需要一个SQL查询来解决以下问题 Table: EMPLOYEE DeptCode Level EmpID Name Mkt VP 1 JOHN Mkt GM 2 BOB Mkt CLERK 3 TIM IT GM 4 BILLY IT GM 5 JESSICA IT CLERK 6 MONICA HR VP 7
Table: EMPLOYEE
DeptCode Level EmpID Name
Mkt VP 1 JOHN
Mkt GM 2 BOB
Mkt CLERK 3 TIM
IT GM 4 BILLY
IT GM 5 JESSICA
IT CLERK 6 MONICA
HR VP 7 NIKITA
HR GM 8 TOM
HR GM 9 HARRY
问题:对于每个部门,我想找到该部门最高级别的员工。如果某个部门的最高级别有2个或更多emp,则该部门不应出现任何记录
级别的层次结构为:VP>GM>办事员
所以我应该得到以下结果
DeptCode Level EmpID Name
Mkt VP 1 JOHN
HR VP 7 NIKITA
因此,VP级没有emp。下一级是GM,但该级有两个emp,因此没有为IT部门选择任何记录
如果您能就这一问题提出一个答案或解决办法,我将不胜感激。再制作一个级别表,其中包含一个排名字段
SELECT e.*
FROM (
SELECT DISTINCT
deptCode
FROM employee
) ed
JOIN employee e
ON e.empId =
(
SELECT empId
FROM employee ei
WHERE ei.deptCode = ed.deptCode
ORDER BY
FIND_IN_SET(level, 'VP,GM,CLERK')
LIMIT 1
)
WHERE NOT EXISTS
(
SELECT NULL
FROM employee eo
WHERE (eo.deptCode, eo.level) = (e.deptCode, e.level)
AND eo.empId <> e.empId
)
Level Rank
VP 1
GM 2
CLERK 3
然后创建一个视图,即vHighestRankPerDept,如下所示:
SELECT Levels.Level AS HighestLevel, t.DeptCode
FROM (SELECT MIN(Levels.Rank) AS Highest, Employee.DeptCode
FROM Levels INNER JOIN Employee ON Employee.Level = Levels.Level
GROUP BY Employee_1.DeptCode) AS t
INNER JOIN Levels ON Levels.Rank = t.Highest
然后:
到目前为止你有尝试过什么吗?请分享你尝试过的任何东西。这可能会有所帮助:试着自己写一些东西,如果写不出来,具体告诉我们你做了什么,这样我们可以帮助你。你先开始,然后我们来帮忙。我们不是为你写的。向我们展示您尝试过的实际代码,然后描述发生了什么和什么不正确,然后我们可以从那里帮助您。如果你先亲自尝试,你很可能会非常接近答案。
SELECT Employee.DeptCode, Employee.Level, MAX(Employee.EmpID) AS EmpID, MAX(Employee.Name) AS Name
FROM Employee
INNER JOIN vHighestRankPerDept ON vHighestRankPerDept.DeptCode = Employee.DeptCode
AND Employee.Level = vHighestRankPerDept.HighestLevel
GROUP BY Employee.DeptCode, Employee.Level
HAVING COUNT(Employee.Level) = 1