【问题标题】:SQL Database Query: Count(Distinct)SQL 数据库查询:计数(不同)
【发布时间】:2016-08-24 22:04:28
【问题描述】:

我正在处理一个 SQL 查询来执行以下操作:

对于两个以上员工从事的每个项目,检索项目编号、项目名称和从事该项目的员工人数。

这是我目前为项目编号 1 所做的:

SELECT project.PNO, project.PNAME, COUNT(DISTINCT works_on.ESSN)
AS '# of employess worked on'

FROM project INNER JOIN works_on
ON project.PNO = works_on.PNO

INNER JOIN employee
ON works_on.ESSN = employee.SSN

HAVING COUNT(DISTINCT works_on.ESSN) > 2
AND project.PNO LIKE 1

然后它返回:

PNO:1

PNAME:ProductX

在职员工人数:7

当它应该返回 NULL 时,因为项目编号 1 在works_on 表中只有两个不同的 ESSN,但它返回的是works_on 表中不同的 ESSN 的总数

附上我的架构:

【问题讨论】:

  • 你忘了GROUP BY

标签: mysql sql database select


【解决方案1】:

您需要按项目获得结果,这意味着您缺少group by 子句:

SELECT     project.PNO,
           project.PNAME, 
           COUNT(DISTINCT works_on.ESSN) AS '# of employess worked on'
FROM       project 
INNER JOIN works_on ON project.PNO = works_on.PNO
INNER JOIN employee ON works_on.ESSN = employee.SSN
GROUP BY   project.PNO, project.PNAME -- Here!
HAVING     COUNT(DISTINCT works_on.ESSN) > 2 AND project.PNO LIKE 1

【讨论】:

  • 非常感谢朋友!我了解如何使用 GROUP BY 对结果中的数据进行排序,但您能解释一下在此处使用它有何帮助吗?
  • @jaxicab group by 不用于订购 - 那是 order by 子句。 group by 使数据库为您在此处分组的每个不同值返回一行(及其聚合函数)。在这里,我们使用它来为每个项目而不是整个数据集应用count
  • 有道理,这是一个很大的帮助!
【解决方案2】:

像这样使用 Group by 和 where 子句:

SELECT project.PNO, project.PNAME, COUNT(DISTINCT works_on.ESSN)
AS '# of employess worked on'

FROM project INNER JOIN works_on
ON project.PNO = works_on.PNO

INNER JOIN employee
ON works_on.ESSN = employee.SSN
where project.PNO LIKE 1
group by project.PNO, project.PNAME 
HAVING COUNT(DISTINCT works_on.ESSN) > 2

【讨论】:

    猜你喜欢
    • 2020-05-14
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    相关资源
    最近更新 更多