欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > SQL-leetcode-196. 删除重复的电子邮箱

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

2025/2/13 11:29:55 来源:https://blog.csdn.net/MrZhangBaby/article/details/144883370  浏览:    关键词:SQL-leetcode-196. 删除重复的电子邮箱

196. 删除重复的电子邮箱

表: Person

±------------±--------+
| Column Name | Type |
±------------±--------+
| id | int |
| email | varchar |
±------------±--------+
id 是该表的主键列(具有唯一值的列)。
该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。

编写解决方案 删除 所有重复的电子邮件,只保留一个具有最小 id 的唯一电子邮件。

(对于 SQL 用户,请注意你应该编写一个 DELETE 语句而不是 SELECT 语句。)

(对于 Pandas 用户,请注意你应该直接修改 Person 表。)

运行脚本后,显示的答案是 Person 表。驱动程序将首先编译并运行您的代码片段,然后再显示 Person 表。Person 表的最终顺序 无关紧要 。

返回结果格式如下示例所示。

示例 1:

输入:
Person 表:
±—±-----------------+
| id | email |
±—±-----------------+
| 1 | john@example.com |
| 2 | bob@example.com |
| 3 | john@example.com |
±—±-----------------+
输出:
±—±-----------------+
| id | email |
±—±-----------------+
| 1 | john@example.com |
| 2 | bob@example.com |
±—±-----------------+
解释: john@example.com重复两次。我们保留最小的Id = 1。

题解

删除不推荐,看到delete就得三思一下,你又不是删库跑路,哈哈
删除重复的,就是去重,怎么去重?
group by 取min 删除其他?
row_number 排名保留1个删除其他?
子查询把要删除的查出来?

方法一 row_number去重留最小

-- 删除不推荐,看到delete就得三思一下
delete from Person where id not in (select id from (select min(id) as id from person group by email ) tmp
)-- 还是优先查出来要保留的内容吧
select 
tmp.id,tmp.email 
from (select id,email,row_number() over(partition by email order by id) as rn from Person
) tmp where tmp.rn=1 order by id 

其他方法不再扩展,自己搞搞就行,都比较简单,结构也差不太多

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com