mysql - 在一个部门的所有项目中工作的员工
问题描述
这是我的数据库:
- 员工(id,department_id,姓名)
- 部门(身份证,姓名)
- 项目(id,department_id)
- 工作 ( employee_id, project_id )
使用PK , FK(例如:Employee 有来自 Department 的 PK id 和 FK departament_id (id))
我想选择在某个部门(例如开发)的所有项目中工作的所有员工(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'
我想对我的问题进行更优雅的查询,并且只想查看员工的姓名。谢谢!
解决方案
你的尝试似乎比你所要求的要多得多。如果您的问题只是如何
选择在某个部门(例如开发)的所有项目中工作的所有员工(E.name)。
然后像下面这样的东西应该工作:
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
推荐阅读
- laravel - Axios POST 到 Laravel API 导致 419 错误,但在邮递员中工作正常
- amazon-web-services - 有没有办法向调用 Fargate 任务的 lambda 发送消息 bak
- ruby-on-rails - Rails 6. 浏览器打开后显示一个带有过期数据的页面
- javascript - TypeScript:构造函数中的位置或命名参数
- vba - VBA访问表检查记录集中的范围是否有复选框
- python - 使用 Google App Engine 部署 Django API 时访问静态文件的问题
- r - GGPLOT X-AXIS 值参考 DATE (M/Y)
- blazor - 登录组件未授权时如何切换注册组件?布雷泽
- python - 如何在熊猫数据框中为具有字符串条件的新列分配值
- java - Java 类型擦除:为什么以下代码段无法编译?