网站建设与维护网课,wordpress自动上传至cdn,南昌网站建设开发公司,低多边形生成网站大家好#xff0c;我是空空star#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目#xff1a;196. 删除重复的电子邮箱二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其… 大家好我是空空star本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目196. 删除重复的电子邮箱二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结前言 一、题目196. 删除重复的电子邮箱
表: Person
----------------------
| Column Name | Type |
----------------------
| id | int |
| email | varchar |
----------------------
id是该表的主键列。
该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。
编写一个 SQL 删除语句来 删除 所有重复的电子邮件只保留一个id最小的唯一电子邮件。
以 任意顺序 返回结果表。 注意 仅需要写删除语句将自动对剩余结果进行查询
查询结果格式如下所示。 示例 1:
输入:
Person 表:
----------------------
| id | email |
----------------------
| 1 | johnexample.com |
| 2 | bobexample.com |
| 3 | johnexample.com |
----------------------
输出:
----------------------
| id | email |
----------------------
| 1 | johnexample.com |
| 2 | bobexample.com |
----------------------
解释: johnexample.com重复两次。我们保留最小的Id 1。
二、解题
1.正确示范①
提交SQL
delete from Person
where id in(
select id from (
select id,email,
row_number() over(partition by email order by id) cols
from Person
) u where cols1
)运行结果 2.正确示范②
提交SQL
delete from Person
where id in(
select id from (
select id,email,
rank() over(partition by email order by id) cols
from Person
) u where cols1
)运行结果 3.正确示范③
提交SQL
delete from Person
where id in(
select id from (
select id,email,
dense_rank() over(partition by email order by id) cols
from Person
) u where cols1
)运行结果 4.正确示范④
提交SQL
delete from Person
where id not in(select min_id from(select email,min(id) min_idfrom Persongroup by email) a
)运行结果 5.其他 总结 正确示范①思路 使用开窗函数row_number()按邮箱分组id升序取排名1以上的然后将这部分数据删除掉 正确示范②思路 使用开窗函数rank()按邮箱分组id升序取排名1以上的然后将这部分数据删除掉 正确示范③思路 使用开窗函数dense_rank()按邮箱分组id升序取排名1以上的然后将这部分数据删除掉 正确示范④思路 使用group by按邮箱分组再用min(id)把每个邮箱对应的最小id找出来然后将这部分id以外的数据删除。 知识点 row_number顺序排序比如序号为1、2、3 rank并列排序会跳过重复的序号比如序号为1、1、3 dense_rank并列排序不会跳过重复的序号比如序号为1、1、2 因为该题目中id是主键唯一的所以row_number、rank、dense_rank在该题目中均适用。