본문 바로가기
알고리즘/leetcode

[LeetCode/MSSQL] 196. Delete Duplicate Emails

by 질서정연_ 2024. 1. 28.

 

문제링크 

 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 
 풀이과정 
 

시도 1. 

테이블  GROUP BY email 로 묶어서 중복된 것 반환하는 쿼리 작성. 

IN 이용. 거기에 속하는거 제거하기

DELETE FROM Person 
WHERE email in 
(
    SELECT email 
    FROM Person
    GROUP BY email
    HAVING COUNT(*) > 1
)

 

결과 1.

틀림. 이유는 이렇게 하면 중복된걸 아예 제거해버리기 때문. 

중복된거 하나만 없애야한다. 

 

시도 2.

가장 작은 id를 가진 row 를 두고 중복되는걸 다 지워야하니까

MAX(id) 를 해보기 

DELETE FROM Person 
WHERE id in 
(
    SELECT MAX(id) 
    FROM Person
    GROUP BY email
    HAVING COUNT(*) > 1
)

 

결과 2.

틀림. 이유는 저렇게 하면 1,2,3 아이디를 가진 같은 값이 있을때 3만 지워주기때문. 2,3 을 다 지워줄 수 있어야한다. 

그러면 .. 

 

시도 3.

DELETE FROM Person 
WHERE id NOT IN  
(
    SELECT MIN(id) 
    FROM Person
    GROUP BY email
)

 

결과 3. 

성공 ~! GROUP BY 해서 가장 작은거 빼고 다 지우면 되니까 저렇게 구현함.

solutions 을 보니까 다들 join 을 해서 풀던데 그건 이해가 잘 안됐다...

 

기억하면 좋을 것 

 

NOT IN 과 IN 을 기억하자.. 

MAX , MIN 을 문자열에 하면 사전순으로 가장 뒤에있는게 나온다 ~!

 

 

Submission Detail

 

댓글