SELECT branch_name, workerID, COUNT(*)
FROM company_branch
LEFT JOIN workers ON workers.branchID = company_branch.branchID
WHERE companyID=?
GROUP BY workers.branchID
我有公司,公司分支机构和工人的数据库。每家公司都有分支机构,每个分支机构都有工人。
树公司>公司分支>工
现在我想要的是获得每个分支的所有分支和工人计数的列表。
我的查询有效,但不适用于0名工作人员为分支机构工作的情况。我想要所有公司分支机构的名单,甚至认为没有任何工人。
答案 0 :(得分:1)
按 /保证的数据进行分组,而不是LEFT JOIN
中的某些数据:
GROUP BY company_branch.branchID
答案 1 :(得分:1)
您正在workers.branchID
进行分组。如果分支没有worker,那么该字段实际上将为null。您应该在company_branch.brandID
上进行分组。由于它位于联接的左侧,因此无论有多少(或几个)工作人员实际连接到该分支,它都将始终可用。
答案 2 :(得分:1)
只是为了澄清Mark B和Wrikken所写的内容:
当您在可能为空的字段上使用GROUP BY
时,如果您没有列出零记录,但是您将所有company_branch
记录集中在一起而没有( NULL
)工作人员 - 这是COUNT(*)
值表示的内容。
以下是sqlfiddle中发生的事情的一个示例:http://sqlfiddle.com/#!2/4fa23/2/0
您有两个分支机构('分支机构2.1'和'分支机构2.2')并且没有工作人员。因此,您的COUNT(*)
为2,但只展示了第一条company_branch
条记录,而且它都在一条记录中。
解决方案正如Mark B和Wrikken所述 - 将GROUP BY
更改为使用company_branch.branchID
。