You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中查询仅部分列重复的所有数据行?

实现SQL查询返回部分列重复的所有行

当然可行,以下是两种常用的实现方式,完全匹配你给出的表结构和需求:

方法一:子查询关联筛选

先通过GROUP BY+HAVING定位存在重复的Column_A+Column_B组合,再关联原表取出这些组合对应的所有行:

SELECT Column_A, Column_B, Column_C
FROM your_table
WHERE (Column_A, Column_B) IN (
    SELECT Column_A, Column_B
    FROM your_table
    GROUP BY Column_A, Column_B
    HAVING COUNT(*) > 1
)

逻辑很直接:子查询先找出那些出现次数超过1次的A+B组合,主查询再把原表中属于这些组合的所有行全部提取出来,正好能返回你需要的4行数据。

方法二:窗口函数标记筛选

利用窗口函数COUNT() OVER()给每一行标记其所属A+B组合的总行数,再筛选出总行数大于1的行:

SELECT Column_A, Column_B, Column_C
FROM (
    SELECT 
        *,
        COUNT(*) OVER (PARTITION BY Column_A, Column_B) AS group_count
    FROM your_table
) AS sub
WHERE group_count > 1

这种方法效率更高,尤其是数据量较大时——数据库仅需扫描一次原表,给每行计算出所在组的行数后直接过滤,避免了子查询可能带来的二次扫描操作。

为什么单纯用GROUP BY+HAVING不行?

你之前用GROUP BY+HAVING只能得到唯一行,是因为GROUP BY的核心作用是聚合分组,会把相同A+B组合的行合并成一行,它无法保留原行的全部数据。我们需要的是将聚合得到的重复分组,映射回原表的所有对应行,所以需要通过关联或窗口函数的方式实现。

内容的提问来源于stack exchange,提问作者temp email

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:00:00