在Postgres SQL中查找共同关系

时间:2019-05-17 16:48:15

标签: sql postgresql

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

Relationships

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

在查询中,我想获取特定公司目前没有的所有客户的列表,以及每个客户共有的公司数量。 “公司共有”是指潜在客户使用您的至少一个客户也使用的公司。

使用上面的“关系”表,这将是公司A的结果:

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

所以公司A与客户2有一家公司,因为公司A的客户使用客户2的公司之一。

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

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 f.firm, c.client
from (select distinct firm from relationship) f cross join
     (select distinct client from relationship) c left join
     relationship r
    on r.firm = f.firm and r.client = c.client
where r.client is null;