SQL Count和Inner Joins乘以我的结果

问题描述 投票:-1回答:1

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

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

SQL代码

SQL结果

实际结果应显示,

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

没有总PO是107

sql
1个回答
-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);

即加入前聚合。

© www.soinside.com 2019 - 2024. All rights reserved.