문제링크
풀이과정
시도 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
'알고리즘 > leetcode' 카테고리의 다른 글
[LeetCode/MSSQL] 262. Trips and Users (0) | 2024.04.06 |
---|---|
[LeetCode/MSSQL] 1327. List the Products Ordered in a Period (1) | 2024.01.28 |
[Leetcode/JS] 226. Invert Binary Tree (0) | 2023.07.18 |
[Leetcode/JS] 404. Sum of Left Leaves (0) | 2023.07.17 |
[Leetcode/JS] 111. Minimum Depth of Binary Tree (0) | 2023.07.13 |
댓글