SQL如何根据字段在表内的出现次数筛选符合要求的查询结果
SQL查询字段重复值对应全量行的实现方案
要实现你需要的效果,WHERE条件可通过关联子查询统计同字段值的出现次数来填充,完整语句如下:
SELECT * FROM table t1 WHERE (SELECT COUNT(*) FROM table t2 WHERE t2.Column1 = t1.Column1) >= 2
如果使用支持窗口函数的数据库(如MySQL 8.0及以上版本、PostgreSQL、SQL Server等),更推荐使用性能更高的窗口函数写法:
SELECT * FROM ( SELECT *, COUNT(*) OVER (PARTITION BY Column1) AS occurrence_count FROM table ) temp WHERE occurrence_count >= 2
两种写法的逻辑说明:
- 关联子查询方案:对每一行的Column1值,统计全表中该值的出现总次数,筛选次数≥2的行
- 窗口函数方案:先按Column1分组统计每组的行数作为额外字段,再筛选符合条件的行,避免了多次子查询,性能更优
针对你给出的测试表,两种写法最终都会返回Column1为a的2行结果,符合预期。
内容的提问来源于stack exchange,提问作者CheckCheck
相关产品推荐
相关产品推荐

