mysql - 在一个部门的所有项目中工作的员工

标签 mysql sql subquery

这是我的数据库:

  • 员工(iddepartment_id、姓名)
  • 部门(id, 姓名)
  • 项目(iddepartament_id)
  • 工作(employee_id、project_id)

有了PKFK(例如:Employee 有PK id 和FK departament_id (id) from Department)

我想选择在某个部门(例如开发部)的所有项目中工作的所有员工 (E.name)。

这是我的查询:

 SELECT E.name, 
        COUNT(P.id) AS PW, 
        AVG(DISTINCT(Q.allproj)) AS PrjOfDep
   FROM Employee E 
   JOIN WORK W 
     ON W.employee_id= E.id
   JOIN Project P 
     ON P.id = W.project_id
   JOIN (SELECT D.id, 
                COUNT(P1.id) AS allproj 
           FROM Project P1
           JOIN Department D 
             ON P1.departament_id = D.id
            AND D.name = "Development" 
       GROUP BY D.id) Q ON P.departament_id = Q.id
       GROUP BY E.ID HAVING PW = PrjOfDep

这有点工作,这是结果:

Name    PW  PrjOfDep    
Stark   2   2.0000
Mike    2   2.0000

我不知道如何检查员工 E 工作的所有项目是否包括部门“开发”的所有项目,所以我做了一个技巧,我的查询看起来很丑陋。我统计了员工 E 在开发部门工作的所有项目,并将其与部门“开发”的项目数量进行了比较。

PrjOfDep 是一个平均值,我用这个丑陋的把戏是因为查询

SELECT E.name, 
       COUNT(P.id) AS PW 
  FROM Employee E 
  JOIN WORK W 
    ON W.employee_id = E.id
  JOIN Project P 
    ON P.id= W.project_id
  JOIN (SELECT D.id, 
               COUNT(P1.id) AS allproj 
  FROM Project P1 
  JOIN Department D 
    ON P1.departament_id= D.id
   AND D.name = "Development" 
   GROUP BY D.id) Q 
    ON P.departament_id= Q.id
   GROUP BY E.id HAVING PW = Q.allproj

给我错误:

 1054 - Unknown column 'Q.allproj' in 'having clause'

我想对我的问题进行更优雅的查询,并且我只想查看员工的姓名。谢谢!

最佳答案

您的尝试似乎比您要求的要多得多。如果您的问题只是如何

select all the employees (E.name) that are working in all project of a certain department (Development, for example).

然后像下面这样的东西应该工作:

SELECT e.name
FROM Employee e
INNER JOIN Work w ON e.eid = w.eid
INNER JOIN Project p ON w.pid = p.pid
INNER JOIN Department d ON p.did = d.did
WHERE d.Deptname = "Development"
GROUP BY e.name
HAVING  COUNT(p.Projname) = (SELECT count(p.Projname)
                FROM Department d
                INNER JOIN Project p ON d.did = p.did
                WHERE d.Deptname = "Development") 

演示:SQL Fiddle

关于mysql - 在一个部门的所有项目中工作的员工,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52116800/

相关文章:

mysql查询返回 "0 rows inserted"

mysql - GROUP BY 字符串的复杂连接

mysql - 使用 Case 和 Group By 按特定顺序获取分组结果

mysql - SQL 连接 : counting rows and get most recent row from another table

mysql - django admin 中的 MultipleObjectsReturned 错误 - 但数据库中没有重复项

mysql - 如何获取查询中每篇文章的作者?

mysql - 两个表之间的差异显示出一些相似之处

php - Mysql - 如果值不存在,则使用另一个表

mysql - 从子查询中选择前n个

php - 尝试使用数据库中的用户登录时出现登录错误 [Yii2-Basic]