我不确定问题标题的措辞如何,因此它适用范围更广(因此对于SO来说这可能不是一个好问题)。只有显示我的特定表和列才有意义。
我有两个表project
和project_team
。每个项目可以有多个员工从事特定项目。
项目表:
+----------------+------------------+--------+
| project_number | project_name | deptNo |
+----------------+------------------+--------+
| 1 | Web App | 1 |
+----------------+------------------+--------+
| 2 | Art History Pres | 2 |
+----------------+------------------+--------+
| 3 | Machine Learning | 1 |
+----------------+------------------+--------+
project_team 表:
+----------------+-------------+------------+
| project_number | employee_id | role |
+----------------+-------------+------------+
| 1 | 1 | Lead Dev |
+----------------+-------------+------------+
| 2 | 2 | Consultant |
+----------------+-------------+------------+
| 1 | 3 | Frontend |
+----------------+-------------+------------+
我使用的示例要求我按角色返回项目编号,项目名称以及从事该项目的员工人数。
这是我现在拥有的:
select role, count(employee_id) from project_team group by role;
如果我做得正确,这应该算出每个担任特定角色的员工。
但是如何返回每个项目及其角色以及在这些角色中工作的假定雇员人数?我的第一个想法是通过使用联接,但我对使用数据库还是比较陌生的。
答案 0 :(得分:1)
您可以加入表,然后按项目ID,名称和角色分组:
SELECT p.project_number, project_name, role, COUNT(*)
FROM project p
JOIN project_team t ON p.project_number = t.project_number
GROUP BY p.project_number, project_name, role
答案 1 :(得分:1)
使用左联接将为您提供所有 项目详细信息(可以使用)。因此,以下查询提供了具有不同角色(x,y,z等)详细信息的所有项目编号/名称。
您的第一个想法是正确的,因为project_team
没有project_name
等,我们需要在这里加入。此外,这里的左加入意味着可能没有project_team中所有项目编号的信息表。为了避免遗漏任何项目编号,我使用了Left join
select p.project_number,
p.project_name,t.role,
count(t.employee_id) from
project p left join
project_team t
on t.project_number =
p.project_number
group by p.project_number,
p.project_name,t.role;