0
SELECT branch_name, workerID, COUNT(*) 
FROM company_branch 
LEFT JOIN workers ON workers.branchID = company_branch.branchID 
WHERE companyID=? 
GROUP BY workers.branchID

我有一个公司、公司分支机构和员工的数据库。每个公司都有分支机构,每个分支机构都有工人。

树:公司 > 公司分公司 > 工人

现在我想要的是获取所有分支的列表和每个分支的工人数量。

我的查询有效,但当 0 名工人为分支机构工作时无效。我想要所有公司分支机构的列表,即使没有任何工人。

4

3 回答 3

1

按您拥有/保证的数据分组,而不是按以下数据分组LEFT JOIN

GROUP BY company_branch.branchID
于 2013-10-16T21:47:23.763 回答
1

你正在分组workers.branchID。如果分支没有工人,那么该字段实际上将为空。您应该company_branch.brandID改为分组。由于它位于连接的左侧,因此无论有多少(或少数)工作人员实际连接到该分支,它都将始终可用。

于 2013-10-16T21:47:36.240 回答
1

只是为了澄清 Mark B 和 Wrikken 所写的内容:

当您GROUP BY在可能为 null 的字段上使用 a 时会发生什么,您没有列出零记录,而是将所有company_branch没有 ( NULL) 工作人员的记录集中在一起 - 这就是您的COUNT(*)值将指示的内容。

这是 sqlfiddle 中发生的事情的一个示例:http ://sqlfiddle.com/#!2/4fa23/2/0

那里有两个分支('Branch 2.1' 和'Branch 2.2'),但都没有工人。所以你COUNT(*)是 2,但只显示第一company_branch条记录,而且都在一条记录中。

解决方案正如 Mark B 和 Wrikken 所说 - 改变你GROUP BY的使用company_branch.branchID

于 2013-10-16T22:03:30.270 回答