【问题标题】:SQL Select and count IssueSQL 选择和计数问题
【发布时间】:2019-03-05 21:45:34
【问题描述】:

我不确定如何措辞问题标题,以便更广泛地适用(所以这对 SO 来说可能不是一个好问题)。只有通过显示我的特定表格和列才有意义。

我有两张桌子projectproject_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;

如果我做得正确的话,这应该计算每个员工的特定角色。

但是如何返回每个项目及其角色以及担任这些角色的假定员工数量?我的第一个想法是通过使用连接,但我对工作数据库相对较新。

【问题讨论】:

标签: mysql sql select


【解决方案1】:

您可以加入表格,然后按项目 ID、名称和角色分组:

SELECT   p.project_number, p.project_name, t.role, COUNT(*)
FROM     project p
JOIN     project_team t ON p.project_number = t.project_number
GROUP BY p.project_number, p.project_name, t.role

【讨论】:

  • @Alec count(*) 计算每组的行数
  • 是的,每个项目每个角色 count()。概括地说,您可以在 count 内写任何列名,因为它汇总了行数,而不是您可以简单地写 (*)
  • @Himanshu Ahuja 所以我也可以使用 count(employee_id) 还是有区别?
  • 不,没有任何区别。它也会给你同样的 o/p
  • @Alec count(employee_id) 将计算具有非空 employee_id 的行。因为它可能不能为空,所以结果是一样的。
【解决方案2】:

使用左连接将为您提供所有 项目详情(可以使用)。因此,以下查询提供了具有不同角色(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; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    相关资源
    最近更新 更多