【问题标题】:Count with condition-mysql用条件-mysql计数
【发布时间】:2013-11-03 16:53:36
【问题描述】:
SELECT pnumber, pname, COUNT(*)
FROM project 
INNER JOIN works_on ON pno=pnumber 
INNER JOIN department ON dnumber=dnum
GROUP BY pnumber

现在,mysql 将返回项目编号和名称,以及正在从事该项目的员工人数。我想要做的是mysql只计算部门5的员工。换句话说,有来自不同部门的人在做项目,但我只想计算部门5的员工,而不是全部。

【问题讨论】:

  • 这不是WHERE 子句的用途吗?
  • 不,如果我使用 where,它只返回部门 5 项目的结果。我想要所有部门的项目,但只计算部门 5 的员工。
  • 那么您在WHERE 子句中使用了错误的列。如果您显示架构会有所帮助。为什么项目有部门编号?人在部门,项目不在。

标签: mysql sql


【解决方案1】:

如果 Barmar 和 Shafeeq 关于使用 WHERE 子句的建议对您不起作用(例如,如果您需要在结果中包括所有部门,但只计算部门 5 的人员),您可以使用:

 SUM(IF(dnum=5, 1, 0)) AS CountFromDepartment5

所以我们有:

SELECT pnumber, pname, COUNT(*) AS TotalCount,  SUM(IF(dnum=5, 1, 0)) AS CountFromDepartment5
FROM project 
INNER JOIN works_on ON pno=pnumber 
INNER JOIN department ON dnumber=dnum
GROUP BY pnumber

【讨论】:

  • 谢谢。这正是我想要的方式。我试图单独使用 count ,这就是为什么我无法让它工作。
【解决方案2】:

你可以使用WHERE

SELECT pnumber, pname, COUNT(*)
FROM project 
JOIN works_on ON pno = pnumber 
JOIN department ON dnumber=dnum
WHERE dnumber = 5
GROUP BY pnumber

编辑

SELECT pnumber, pname, COUNT(*),SUM(IF(dnumber=5, 1, 0)) AS count5 
FROM project 
JOIN works_on ON pno = pnumber 
JOIN department ON dnumber=dnum
GROUP BY pnumber

【讨论】:

  • 我已经试过了,如果我使用 where,它只返回部门 5 项目的结果。我想要所有部门的项目,但只计算部门 5 的员工。
【解决方案3】:

使用WHERE 子句指定您想要的部门。

SELECT pnumber, pname, COUNT(*)
FROM project 
INNER JOIN works_on ON pno=pnumber 
WHERE dnumber = 5
GROUP BY pnumber

您不需要加入department,因为部门号也作为外键存在于works_on 表中。

【讨论】:

    猜你喜欢
    • 2015-09-23
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 2022-06-15
    • 2012-04-05
    • 2016-03-21
    • 1970-01-01
    相关资源
    最近更新 更多