SQL Count和Inner Joins乘以我的结果

时间:2018-03-01 15:40:45

标签: sql

寻求一些帮助。我是SQL的新手,我根本不理解我的问题。

下面我展示了我的代码,我在运行代码时看到的结果以及应该显示的实际结果的详细信息

SQL代码

SQL Code

SQL结果

SQL Results

实际结果应显示,

No NCR are in fact 1
No MRB are in fact 1
No BA are infact 3

没有总PO是实际的107

1 个答案:

答案 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);

即。加入前聚合。