我正在尝试进行查询,其中我将拥有 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)
这是架构:
但是我们可以忽略所有噪音并使用我们需要的东西: employee(id, super)
这是插入的小提琴:http : //dbfiddle.uk/? rdbms=postgres_9.6&fiddle= 4c08869d0e8eba6c82fd4957092379a1
关于如何做到这一点的任何想法?
您需要以相反的方式加入: 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)
归档时间: |
|
查看次数: |
121 次 |
最近记录: |