sql-leetcode-196. 删除重复的电子邮箱

196. 删除重复的电子邮箱 - 力扣(LeetCode)

以下是 SQL 和 Pandas 解决方案:

SQL 解决方案

使用 DELETE 语句删除重复的邮箱,仅保留 id 最小的记录:

DELETE p1 FROM Person p1
JOIN Person p2 
ON p1.email = p2.email AND p1.id > p2.id;

解释:

  • p1p2Person 表的两个别名,p1 代表要删除的行,p2 代表要保留的行。
  • ON p1.email = p2.email 确保比较相同的邮箱。
  • AND p1.id > p2.id 确保 p1 只删除比 p2 ID 大的记录,即保留 ID 最小的记录。

Pandas 解决方案

直接修改 Person 数据框,删除重复邮箱:

import pandas as pd

# 假设已给定 DataFrame
# Person = pd.DataFrame({'id': [...], 'email': [...]})

Person.sort_values(by="id", inplace=True)  # 先按 id 升序排列
Person.drop_duplicates(subset="email", keep="first", inplace=True)  # 删除重复项,只保留最小 id

解释:

  • sort_values(by="id", inplace=True): 先按 id 升序排序,以确保最小 id 在前。
  • drop_duplicates(subset="email", keep="first", inplace=True): 只保留第一个出现的邮箱,删除后续重复项。

这样可以正确删除重复邮箱,仅保留最小 id 的记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值