데이터베이스/쿼리 문제

182. Duplicate Emails (leetCode 코딩 알고리즘 문제)

daslyee 2021. 9. 5. 00:42
728x90

1. 문제 : 

Person.라는 테이블에서 모든 중복 이메일을 찾는 SQL 쿼리를 작성합니다 

예를 들어 쿼리는 위 테이블(아래 결과)에 대해 다음을 반환해야 합니다.

 

 

2. 정답 : Description 옆에 Solution 탭으로 이동 또는 

https://github.com/keineahnung2345/leetcode-cpp-practices/blob/master/182.%20Duplicate%20Emails.sql 참고

 

GitHub - keineahnung2345/leetcode-cpp-practices: Including problem statement, solution, runtime and complexity analysis.

Including problem statement, solution, runtime and complexity analysis. - GitHub - keineahnung2345/leetcode-cpp-practices: Including problem statement, solution, runtime and complexity analysis.

github.com

3. 정답 해설 : 

정답은 여러가지이며 본인에게 이해가 빠른 것으로 하길 바란다.

문제의 핵심은 중복 값을 추출해 내는 것이다. 

Person 테이블을 보면 중복 값이 1개 이상이 되어야 한다는 걸 확인 할 수 있다. (row 1, 3)

먼저 Group by 와 Having 절을 통해서 간단하게 풀수 있다. 

SELECT P.Email
FROM Person P
Group by P.Email
Having COUNT(P.*) > 1

-- result : a@b.com

 

4. 추가 :

특정컬럼의 중복 값을 확인하고 싶을 때가 있을 것이다. (예시 : 통계)

그럴 때에는 아래와 같이 결과 값을 한번 묶고 표현해 주는 방식도 좋은 방안이 될 것이다.

정답 링크에서도 확인 가능하다.

select PS.Email as mailNm, PS.cnt as cnt from
(
  select P.Email, count(P.Email) as cnt
  from Person P
  group by P.Email
) as PS
where PS.cnt >= 0
Order by PS.cnt

-- result : 
a@b.com | 1
c@d.com | 0

 

 

728x90