繁体   English   中英

带有外部联接的Postgresql获取空值

[英]Postgresql with Outer Join to Get Nulls Included

数据库新手。 我有一个如下的架构:

Employee(**eid**, pname, age) 
Dept(**dname**, num_managers) / Dept = department
Dept_Wing(**wingno**, wing_name, dname) / Dept_Wing = which wing of department
Wing_Sub_Division(**dname**, **wingno**, **sub_div_no**) / Wing_Sub_Division = which sub-division of the wing 
On_Duty(**eid**, **dname**, **wingno**, sub_div_no) 

我想得到的是:dname,wingno,每个机翼在所有机翼上的值班人数少于雇员总数的15%(因此,其中包括0名在职员工的dept_wings)。

我试过了

select w.wingo, od.wingo
from dept_wing w left outer join on_duty od on on w.wingo=od.wingno

只是为了让所有连翅膀都没有值班的员工腾出来,但我什至无法归还那些员工! 任何指导表示赞赏!

看来您正在使用组合键; 部门名称由dnamewingno标识,因此您在Dept_WingWing_Sub_DivisionOn_Duty拥有一对。 这使得此查询非常简单。

这是如何获得每个部门的值勤员工人数:

select dname, wingno, count(*)
from on_duty
group by dname, wingno

所以整个查询是

select
  wing.dname, wing.wingno, coalesce(duty.cnt, 0) as employees_on_duty
from dept_wing wing
left join
(
  select dname, wingno, count(*) as cnt
  from on_duty
  group by dname, wingno
) duty on duty.dname = wing.dname and duty.wingno = wing.wingno
where coalesce(duty.cnt, 0) < 0.15 * (select count(*) from employee);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM