48.删除重复的电子邮箱
表: Person
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| id | int |
| email | varchar |
+-------------+---------+
id是该表的主键列。
该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。
编写一个SQL查询来 删除 所有重复的电子邮件,只保留一个id最小的唯一电子邮件。
以 任意顺序 返回结果表。
/*根据题意可知该题希望保留的是同一邮箱下Id较小的那条数据,反之就是需删除同一邮箱下Id较大的数据条目,这里使用开窗函数来解决:
针对同一邮箱,对其Id序号进行排序rn;
依据题意,只保留排序rn=1的数据,其余数据均需删除
*/
delete
from Person
where Id in
(
select Id
from
(
select Id,
row_number() over(partition by Email order by Id) rn
from Person
) t1
where rn>1
)