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
    )

 

posted @ 2022-03-14 08:56  随遇而安==  阅读(60)  评论(0编辑  收藏  举报