尝试使用加入、计数和分组,但没有按我的意愿工作

Posted

技术标签:

【中文标题】尝试使用加入、计数和分组,但没有按我的意愿工作【英文标题】:Trying to use join, count and group by, but not working as I want 【发布时间】:2021-10-31 08:59:18 【问题描述】:

我正在查询我的数据库,它是一个公司目录。公司目录有三个单独的表;员工、部门和地点。

下面是我的表结构的图像:

我正在尝试查询数据库,以便获取部门 id、部门名称、位置 id、位置名称以及该部门内的员工人数等列。但是,即使还没有分配给它的工作人员,我也需要它来列出部门。

我不确定要使用哪种类型的连接,但我知道我必须使用 count 和 groupBy 函数。

我对 SQL 还是很陌生,还不是很了解。我尝试了一两种方法,但都无济于事。

这是我的尝试,它确实带来了我想要的结果,但它排除了没有员工的部门。

SELECT p.id, p.lastName, p.firstName, p.jobTitle, p.email, d.id, 
    d.name as department, l.name as location, COUNT(*) as totalStaff 
FROM personnel p 
LEFT JOIN department d ON (d.id = p.departmentID) 
LEFT JOIN location l ON (l.id = d.locationID) 
GROUP BY (d.id) 

有人可以帮忙吗?

【问题讨论】:

很确定这是你几个小时前问的。至少您的最后一个问题包含一个查询尝试 用一个 sql 问题来提供一个模式和一些测试数据都是可以复制/粘贴的文本,这总是很好的。图片真的没用 还是作为SQLFiddle。 我看到上一个问题时被叫走了,我记得我好像记得你需要使用FROM department LEFT JOIN the other 2 tables然后你总是会得到部门数据 嗨里格斯!是的,对此感到抱歉。我想我需要再次解释一下自己,但要以更好的方式。我不得不进一步澄清我的解释。如果再次有帮助,我已经更新了我的原始查询尝试。 【参考方案1】:

从部门开始,然后加入其他 2 个表格,这将确保您始终获得所有部门信息,我似乎记得这是您在上一个问题中的原始问题

SELECT p.id, p.lastName, p.firstName, p.jobTitle, p.email, 
        d.id, d.name as department, 
        l.name as location, 
        COUNT(p.id) as totalStaff 
FROM department d
    LEFT JOIN personnel p ON (d.id = p.departmentID) 
    LEFT JOIN location l ON (l.id = d.locationID) 
GROUP BY (d.id) 

【讨论】:

COUNT(*) 应该是 COUNT(p.id),因此您不计算没有人员的部门的 NULL 值。 谢谢@Barmar 非常感谢@RiggsFolly !!它完全按照我想要的方式工作:)

以上是关于尝试使用加入、计数和分组,但没有按我的意愿工作的主要内容,如果未能解决你的问题,请参考以下文章

presentViewController 没有按我的意愿工作

未在实例上定义,但在渲染期间引用,但可以按我的意愿工作

IFNULL只返回0,任何方式使这项工作?

带有 Vuex 的 vue-table-2 - 无法更改计数属性

React 表单 useState 对象无法按我的意愿工作

如何按月份或年份计数和分组,月份为零