【发布时间】:2018-08-31 13:43:18
【问题描述】:
这是我的数据库:
- 员工(id、department_id、姓名)
- 部门(id,名称)
- 项目(id, departament_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'
我想对我的问题进行更优雅的查询,并且我只想查看员工的姓名。谢谢!
【问题讨论】:
-
什么是 dnr 和 pnr?
-
部门表和项目表的主键
-
能否提供一些示例数据
-
首先... launchbylunch.com/posts/2014/Feb/16/sql-naming-conventions .. 使用命名约定。为您和任何人命名,可以帮助您在忘记所做的任何事情后理解您的代码。
-
好的,我会尝试更新我的问题。