许多 SELECT DISTINCT 查询的交集

Intersection of many SELECT DISTINCT queries

我有一个包含 companylocation 列的 table recruiter。我想找到列表中每家公司至少有一名招聘人员的所有不同地点。

我可以找到给定公司的招聘人员工作的所有地点

SELECT DISTINCT location 
    FROM recruiter 
        WHERE company='Google'

但我想为一堆不同的公司做这个并得到它们的交集。

我发现之前的一个问题似乎问了类似的问题:。 但是,该问题专门询问了 two SELECT 查询结果的交集,答案似乎并没有概括为任意数字。

具有示例数据和预期结果的可重现示例在这里会很有帮助。我猜你想要像

这样的东西
select location, count(distinct company)
  from recruiter
 where company in ('Google', 'Microsoft', 'Amazon')
 group by location
having count(distinct company) = 3;

这将 return 每 location 一行,其中三个公司中的每一个至少有一行。当然,如果您将其他公司添加到列表中,则需要调整 having 子句中的文字。

当有很多公司时,使用多个查询会很困难, 你可能需要这样的东西

SELECT LOCATION
FROM RECRUITER
WHERE COMPANY IN (/list of companies/)
GROUP BY LOCATION
HAVING COUNT(DISTINCT COMPANY) = /count of companies/

此查询将提供至少有一名来自公司的招聘人员的地点名称