1. 程式人生 > 其它 >48.刪除重複的電子郵箱

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
    )