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

如何处理仅id列不同的表重复行 实现每组重复记录仅保留单条

数据表重复行查询去重实现方案

你的需求是基于name、roll_number两个字段去重,每组仅保留id最小的一条记录,可参考以下几种常用实现方式:

方法1:GROUP BY + 子查询(兼容性最好,支持所有主流数据库)

先通过分组拿到每个重复组的最小id,再关联原表获取完整行数据:

SELECT t.* 
FROM 你的表名 t
INNER JOIN (
    SELECT MIN(id) AS min_id 
    FROM 你的表名 
    GROUP BY name, roll_number
) t2 ON t.id = t2.min_id
ORDER BY t.id;

方法2:ROW_NUMBER窗口函数(更灵活,MySQL8.0+、PostgreSQL、SQL Server、Oracle均支持)

给每个重复组的行按id升序排序打行号,取每个组行号为1的记录即可:

SELECT id, name, roll_number 
FROM (
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY name, roll_number ORDER BY id ASC) AS rn
    FROM 你的表名
) t
WHERE rn = 1
ORDER BY id;

方法3:DISTINCT ON(仅PostgreSQL支持,写法最简洁)

如果使用PostgreSQL数据库,可以直接用特有语法实现:

SELECT DISTINCT ON (name, roll_number) id, name, roll_number
FROM 你的表名
ORDER BY name, roll_number, id ASC;

以上三种方法执行后都可以得到你预期的输出结果,每组重复行仅保留id最小的一条。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:45:03