如何在多个表中的 COUNT 聚合中计算零结果



我有 3 个示例表:1. 人

PID         PNAME                         
----------- ------------------------------
111111111.  James Brock
222222222.  Dean Sampson
333333333.  Adam Klein
444444444.  Sam Toggle
  1. 公司

    国际舞蹈委员会别名记录


    1. A公司
    2. B公司
    3. C公司
    4. D公司
  2. 加工

    PID 别名记录


    1. B公司
    2. A公司
    3. A公司
    4. 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 个表格进行匹配。

切勿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;

请注意,PERSON JOIN是不必要的。 你只是在数人,而不是查他们的名字。

最新更新