如何基于存在重复值的两列从关联表中提取唯一行
需求实现方案
可行性确认
该需求完全可以实现,核心逻辑为基于Last、Street两列做分组去重,每组内保留任意一条记录即可。
常见场景实现方法
SQL处理(关联表后直接在数据库内处理)
适配所有支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server等)
使用ROW_NUMBER()窗口函数按Last、Street分区,分区内无需指定排序规则,取每组第一条即可:SELECT 第三列名, Last, Street FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY Last, Street ORDER BY (SELECT 1)) AS rn FROM 你的关联结果临时表/子查询 ) t WHERE rn = 1;其中
ORDER BY (SELECT 1)表示无需特殊排序,数据库会随机取分组内的一条记录返回,符合你保留任意一条的要求。低版本无窗口函数的数据库
配合聚合函数+分组实现,第三列可随意用MAX()/MIN()取值:SELECT MAX(第三列名) AS 第三列名, Last, Street FROM 你的关联结果临时表/子查询 GROUP BY Last, Street;
离线数据处理
- Excel场景:选中全量数据,点击「数据」选项卡下的「删除重复值」,弹窗中仅勾选
Last、Street两个重复判断列,确认后即可自动去重,保留每组第一条记录。 - Python Pandas场景:调用
drop_duplicates方法指定去重列即可:# df为关联后生成的DataFrame对象 df = df.drop_duplicates(subset=['Last', 'Street'], keep='first') # keep参数可替换为'last',按需选择保留的位置即可
内容的提问来源于stack exchange,提问作者hwight
相关产品推荐
相关产品推荐

