如何查找数据中的重复行并正确输出行号、名称等对应信息
重复行查找多场景实现方案(支持输出行号、名称、编号字段)
1. SQL场景(关系型数据库通用)
核心逻辑是先通过窗口函数定位重复分组,再关联拉取全量需要的字段,语句可直接适配MySQL、PostgreSQL、SQL Server等主流数据库:
-- 输出所有重复行的行号、名称、编号及对应分组的重复行数 SELECT 行号字段名, 名称字段名, 编号字段名, repeat_count AS 该分组重复行数 FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY 名称字段名, 编号字段名 ORDER BY 行号字段名) AS rn, COUNT(*) OVER (PARTITION BY 名称字段名, 编号字段名) AS repeat_count FROM 你的表名 ) t WHERE repeat_count >= 2 -- 仅返回存在重复的分组数据 -- 若只需返回除第一条外的冗余重复行,可额外添加 AND rn > 1 条件
使用时替换语句内的行号字段名、名称字段名、编号字段名、你的表名为实际业务的字段和表名即可。
2. Python Pandas场景
适合处理本地文件类的表格数据,核心是通过duplicated方法标记重复行后筛选指定字段输出:
import pandas as pd # 读取本地数据,csv格式可替换为pd.read_csv("你的文件路径.csv") df = pd.read_excel("你的文件路径.xlsx") # 按名称、编号两个字段判断重复,keep=False表示标记该分组下所有重复行 df["是否重复"] = df.duplicated(subset=["名称", "编号"], keep=False) # 筛选重复行并输出行号、名称、编号字段,这里行号默认取原始数据的行索引 result = df[df["是否重复"] == True].reset_index().rename(columns={"index": "行号"})[["行号", "名称", "编号"]] # 打印结果,也可通过下行代码导出为本地文件 # result.to_excel("重复行查询结果.xlsx", index=False) print(result)
3. Excel场景
无需代码,用辅助列即可实现需求:
- 第一步:新增重复标记辅助列,在第一行数据的空白单元格输入公式
=COUNTIFS(B:B,B2,C:C,C2),其中B列为名称列、C列为编号列,下拉填充所有行 - 第二步:筛选辅助列数值大于1的行,即为所有存在重复的分组行,直接选中行号、名称、编号列复制即可得到需要的结果
- 若只需标记除首行外的冗余重复行,可将公式替换为
=COUNTIFS(B$2:B2,B2,C$2:C2,C2)>1,返回TRUE的即为冗余重复行
内容的提问来源于stack exchange,提问作者codingn00b
相关产品推荐
相关产品推荐

