如何用单条SELECT语句筛选col1对应唯一col2值的所有记录?
解决方案:筛选同一ID对应唯一值的记录
这里有两种单条SELECT语句的实现方式,你可以根据自己使用的数据库版本选择合适的:
方法1:使用窗口函数(推荐现代数据库)
SELECT col1, col2 FROM ( SELECT col1, col2, -- 按col1分组,计算每组内不同col2的数量 COUNT(DISTINCT col2) OVER (PARTITION BY col1) AS unique_col2_count FROM Demo ) AS filtered_subquery -- 只保留每组内col2唯一的记录 WHERE unique_col2_count = 1;
逻辑说明
- 子查询里用
PARTITION BY col1把数据按ID分组,COUNT(DISTINCT col2)统计每个ID下不同col2值的数量 - 外层筛选出统计数量为1的记录,这样就确保了对应的ID所有col2值完全一致,不会出现混合值的情况
方法2:使用关联子查询(兼容性更强)
SELECT d1.col1, d1.col2 FROM Demo d1 -- 排除那些存在同一ID但不同col2值的记录 WHERE NOT EXISTS ( SELECT 1 FROM Demo d2 WHERE d2.col1 = d1.col1 AND d2.col2 != d1.col2 );
逻辑说明
- 对于每条记录,检查是否存在同一个ID但col2值不同的其他记录
- 如果不存在这样的记录,说明该ID下所有col2值都相同,就保留这条记录
这两种方法都能精准得到你需要的输出结果,比如针对你的Demo表,两种语句都会返回col1为100的所有4条记录。
内容的提问来源于stack exchange,提问作者Arun Solomon
相关产品推荐
相关产品推荐

