尝试使用加入、计数和分组,但没有按我的意愿工作
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 没有按我的意愿工作