寻求一些帮助。我是SQL的新手,我根本不理解我的问题。
下面我展示了我的代码,我在运行代码时看到的结果以及应该显示的实际结果的详细信息
SQL代码
SQL结果
实际结果应显示,
No NCR are in fact 1
No MRB are in fact 1
No BA are infact 3
没有总PO是实际的107
答案 0 :(得分:-1)
我会尝试一个小例子:一个人有朋友和家人。
<强>家族强>
<强>朋友强>
如果你这样做:
select person, count(family.member), count(friends.friend)
from family
join friends using (person);
然后每个人你带走所有朋友和所有家庭成员并将它们结合起来:
person friend family 123 Fred Mum 123 Fred Dad 123 George Mum 123 George Dad
因为所有记录都是针对人123的,这是您加入的唯一标准。计数均为4,因为您计算朋友或家庭成员不为空的行,对于所有已连接的行都是如此。
你不想和家人一起加入朋友,因为他们没有直接关系。您想要做的是加入 家庭成员的数量每人的朋友数量。
select person, coalesce(fam.cnt, 0), coalesce(frd.cnt, 0)
from
(select person, count(*) as cnt from family group by person) fam
full outer join
(select person, count(*) as cnt from friends group by person) frd using (person);
即。加入前聚合。