我有一个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
它正确显示了每个客户的正确共同公司数目,但是仅列出了该公司的现有客户。相反,我想列出目前没有与该公司有关系的客户。
我将不胜感激!
谢谢
答案 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;