PostgreSQL查询:找出显示器厂商无重复的实验室编号
解决方案:查询无重复显示器厂商的实验室编号
你的核心问题是没有按实验室维度统计厂商重复情况,全局统计自然无法满足需求。这里提供两种PostgreSQL的实现方案:
方案一:分组统计+排除重复实验室
思路:先关联表获取每个实验室的显示器厂商信息,按实验室+厂商分组统计出现次数,定位出存在厂商重复的实验室,最后从所有实验室中排除这些有问题的。
-- 先找出存在厂商重复的实验室 WITH duplicate_labs AS ( SELECT c.laboratory_number FROM computer c JOIN monitor m ON c.id_monitor = m.id GROUP BY c.laboratory_number, m.id_company HAVING COUNT(*) > 1 ) -- 筛选出没有厂商重复的实验室 SELECT DISTINCT c.laboratory_number AS laboratory_number FROM computer c WHERE c.laboratory_number NOT IN (SELECT laboratory_number FROM duplicate_labs);
方案二:总设备数与唯一厂商数对比
思路:如果一个实验室的电脑总数,等于该实验室下不同显示器厂商的数量,说明所有厂商都没有重复(每台电脑的显示器厂商唯一)。
SELECT c.laboratory_number AS laboratory_number FROM computer c JOIN monitor m ON c.id_monitor = m.id GROUP BY c.laboratory_number HAVING COUNT(DISTINCT m.id_company) = COUNT(*);
测试结果
用你提供的示例数据验证,两种方案都会返回符合预期的结果:
laboratory_number ----------------- 1
方案说明
- 方案一逻辑直观,先定位问题实验室再排除,适合数据量较大的场景
- 方案二更简洁,通过数量对比直接筛选,代码量少易理解
内容的提问来源于stack exchange,提问作者arnold
相关产品推荐
相关产品推荐

