在Postgres SQL查询中查找共同的关系数

时间:2019-06-03 21:48:07

标签: sql postgresql

我有一个Postgres表,其中包含公司与客户之间的关系:

Clients

ID
1
2
Firms

ID
A
C
Relationships

Firm, Client
A, 1
C, 1
C, 2

对于每个公司-客户组合,我想获得以下公司的数量:(1)客户使用,并且(2)至少一个公司客户使用。

例如,在上面,公司A的结果为:

Firm, Client, # of Firms in Common
A, 2, 1

这意味着客户2使用1家公司,而公司A的客户(客户1)使用1家公司。

这是我到目前为止的查询:

select r1.firm, r1.client, count(distinct(r2.firm)) from relationships r1
join relationships as r2 ON r1.client = r2.client
where r1.firm = 'FIRM NAME HERE'
group by r1.firm, r1.client

这将返回正确的结果(与上面带有#个公司的共同结果一致),但仅列出该公司已经与之建立关系的客户。我还要包括与该公司没有关系的客户。

我相信这意味着我需要从“客户”表中引入所有客户以进行此查询,但是不确定如何这样做,并且仍然为每种可能的公司-客户组合获取相同的公司数量。

将非常感谢任何提示!

1 个答案:

答案 0 :(得分:0)

select *,
(
  select count(distinct firm)
  from relationships 
  where firm in (select firm from relationships where client = r.client) 
  and client <> r.client
) c
from relationships r
where firm = 'FIRM NAME HERE'