如何在多个表的 COUNT 聚合中计算零结果?
Posted
技术标签:
【中文标题】如何在多个表的 COUNT 聚合中计算零结果?【英文标题】:How to count zero results in COUNT aggregate across multiple tables? 【发布时间】:2018-07-08 19:42:44 【问题描述】:我有 3 个示例表: 1. 人
PID PNAME
----------- ------------------------------
111111111. James Brock
222222222. Dean Sampson
333333333. Adam Klein
444444444. Sam Toggle
公司
CID CNAME
-
A公司
公司B
C公司
D公司
工作
PID CNAME
-
公司B
A公司
A公司
C公司
我想显示每家公司的员工人数,包括那些没有任何员工的员工(即:0 人)
所以到目前为止我有这个:
SELECT CNAME, COUNT(*) as EMPLOYEES
FROM PERSON P, WORKING W, COMPANY C
WHERE P.PID = W.PID
AND W.CNAME = C.CNAME
GROUP BY CNAME;
返回:
CNAME EMPLOYEES
----------- ------------------------------
Company A 2
Company B 1
Company C 1
请注意,D 公司不见了
我想要这个:
CNAME EMPLOYEES
----------- ------------------------------
Company A 2
Company B 1
Company C 1
Company D 0
有没有我可以采取的方法来获得我想要的结果?我在网上找到的所有其他示例仅使用 2 个表进行匹配。
【问题讨论】:
工作中的 PID 与实际的不对应。工作表将不包含 cname,而是包含 cid。只有这样你才需要加入三个表。 【参考方案1】:永远不要在FROM
子句中使用逗号。 始终使用正确、明确的JOIN
语法。然后,LEFT JOIN
就很明显了。
SELECT C.CNAME, COUNT(W.PID) as EMPLOYEES
FROM COMPANY C LEFT JOIN
WORKING W
ON W.CNAME = C.CNAME
GROUP BY C.CNAME;
请注意,JOIN
到 PERSON
是不必要的。你只是在数人,而不是查他们的名字。
【讨论】:
以上是关于如何在多个表的 COUNT 聚合中计算零结果?的主要内容,如果未能解决你的问题,请参考以下文章