如何计算零会导致多个表中的COUNT聚合?

时间:2018-01-30 01:44:32

标签: sql database db2 aggregate-functions

我有3个示例表: 1.人

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

    CID CNAME

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

    PID CNAME

    1. 公司B
    2. 公司A
    3. 公司A
    4. 公司C
  3. 我想展示每家公司的员工数量,包括没有员工的员工(即: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个表来匹配。

1 个答案:

答案 0 :(得分:0)

从不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;

请注意,JOINPERSON是不必要的。你只计算人,而不是查找他们的名字。