计数值以零而不是空值显示

shi*_*zou 1 postgresql

我正在尝试进行查询,其中我将拥有 id 和该人是他们的上司的员工人数,还有不是经理的人,应该出现并且计数为零。

这就是我所做的,但那些不是经理的人显示为空:

create view scnt as (
    select E1.super, count(distinct E1.id) cnt
    from Employee E1 left outer join Employee E2
    on E1.super = E2.id
    group by E1.super
);

create view numSuper as (
    select E.id, S.cnt
    from Employee E left outer join scnt S
    on S.super = E.id or E.id = null
);

select * from numSuper
Run Code Online (Sandbox Code Playgroud)

这是架构:

1

但是我们可以忽略所有噪音并使用我们需要的东西: employee(id, super)

这是插入的小提琴:http : //dbfiddle.uk/? rdbms=postgres_9.6&fiddle= 4c08869d0e8eba6c82fd4957092379a1

关于如何做到这一点的任何想法?

ype*_*eᵀᴹ 6

您需要以相反的方式加入: managers LEFT JOIN employees

create view scnt as 
    select E2.id as super, 
           count(E1.id) as cnt
    from Employee E2                    -- managers
      left outer join Employee E1       -- employees
      on E1.super = E2.id
    group by E2.id
  ;

select * from scnt ;
Run Code Online (Sandbox Code Playgroud)

数据库小提琴