인프런 커뮤니티 질문&답변

wasd7595님의 프로필 이미지
wasd7595

작성한 질문수

초보자를 위한 BigQuery(SQL) 입문

2-6. 연습 문제 4~6번

2-6 5번 중복 행도 있을 것 이란 가능성을 추가로 염두 했을 때 보강 쿼리 문의

해결된 질문

작성

·

49

0

안녕하세요! 덕분에 남이 짠 쿼리의 의미는 파악이 가능한 수준이 될 것 같다는 자신감이 든 수강생입니다! 감사합니다.

2-6 5번 문제를 직면했을 때 동명이인 = 이름 이외 다른 값이 다 다른 경우로 정의했고,

다행히 강사님의 파일에는 해당하지 않지만, 이름이 같고 다른 값도 다 같은 "중복 데이터"가 있을 수 있다는 가능성도 생각을 했습니다.

그래서 혼자 골똘히 고민했는데, (조건이 2개인가? "이름이 같다" and "다른 컬럼이 다르다" 등) 답이 나오지 않아 재생해보니 생각보다 단순한 쿼리여서 놀랐어요.

동명이인이 있는 이름은 무엇일까요? + 전체 파일의 중복 데이터는 제거(ex. 엑셀의 중복 값 제거 )는 아래와 같이 하면 될까요?

SELECT
DISTINCT
 name,
 COUNT (name) AS CNT
FROM basic.trainer
GROUP BY name
HAVING CNT>=2

답변 1

1

카일스쿨님의 프로필 이미지
카일스쿨
지식공유자

안녕하세요! 강의 수강하셔서 역량이 올라가셨군요.

잘 수강해주셔서 저도 감사하다는 말씀을 드리고 싶어요. 수강을 해주시고 이런 말씀을 해주셔서 감사합니다.

 

"동명이인"을 분류하기 위해서 실제 회사에선 주민등록 번호나 스마트폰 인증을 통한 CI 값 등을 활용해요.
CI에 대한 내용 : https://yozm.wishket.com/magazine/detail/2488/

그러나 이런 경우엔 모든 컬럼을 보고 다른 내용이 있다면 다른 사람이구나!라고 볼 수도 있지요. 여러 컬럼 중에 이름이 제일 중요한 분기점이라 말씀하신 내용으로 구하시면 되어요.

쿼리를 조금 더 손본다고 하면

SELECT
 name,
 COUNT (name) AS CNT
FROM basic.trainer
GROUP BY name
HAVING CNT>=2

이렇게 DISTINCT를 제외하고 쓰는 것이 더 좋아요. 중복을 제거할 때 DISTINCT를 사용하거나 GROUP BY를 사용할 수 있는데 둘 다 같이 사용하는 것은 거의 하지 않아요. HAVING을 사용하려고 하셨으니 GROUP BY가 필요하니 위 쿼리처럼 하시면 됩니다!

 

wasd7595님의 프로필 이미지
wasd7595
질문자

아하 넵넵 답변 감사합니다. 🙂

wasd7595님의 프로필 이미지
wasd7595

작성한 질문수

질문하기