我有一个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
这将返回正确的结果(与上面带有#个公司的共同结果一致),但仅列出该公司已经与之建立关系的客户。我还要包括与该公司没有关系的客户。
我相信这意味着我需要从“客户”表中引入所有客户以进行此查询,但是不确定如何这样做,并且仍然为每种可能的公司-客户组合获取相同的公司数量。
将非常感谢任何提示!
答案 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'