Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 单表上的SQL查询_Mysql_Sql - Fatal编程技术网

Mysql 单表上的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

我需要一个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    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