JOIN 함수 사용 후 각 그룹별로 합계를 낼때 중복 문제가 있어서 질문 드립니다. 0 2 2,019

by 베르강 [SQL Query] JOIN 중복레코드 [2021.04.03 10:09:07]


20210403_094257.jpg (351,554Bytes)

민망하지만 잘 풀리지 않아 이리저리 찾다가 게시판이 있어서 글을 남깁니다. LEFT JOIN도 그렇고,
중복 레코드에 대한 문제가 풀리지 않네요ㅠ
첨부 그림과 같이 a 테이블의 a.sgg를 기준으로 b테이블을 가져와서 a.person의 목록을 아래와 같은 쿼리로 실행을 하면 올바르게 나옵니다.

SELECT a.sido_cd, a.sgg_cd, b.cc_cod, a.person FROM berkang.aaa a
INNER JOIN berkang.bbb b on a.sgg_cd = b.ee_cod
GROUP BY a.sgg_cd, b.cc_cod;
sido_cd sgg_cd cc_cod person
11 101 11 100485
11 102 11 183025.5
11 103 11 146671
11 104 11 200417
11 105 11 673337

문제는 cc_cod를 그룹으로 person의 합계를 구할때 문제가 생깁니다.

SELECT a.sido_cd, b.cc_cod, SUM(a.person) FROM berkang.aaa a
INNER JOIN berkang.bbb b on a.sgg_cd = b.ee_cod
GROUP BY a.sido_cd, b.cc_cod;

sido_cd cc_cod SUM(a.person)
11 11 10663135
12 12 14072506
13 13 73262637
14 14 24451182

각 그룹의 합계가 실제보다 2배씩 산출됩니다.

그 이유가 a테이블의 a.sgg_cd 컬럼 값에 대응되는 b.ee_cod 컬럼값이 두배 중복되어 있습니다(말이 이상한가요?^^;;)

a.sgg_cd에 1 이 b.ee_cod에 두개가 들어가 있습니다(b 데이터 원본이 시군구, 행정동에 대한 것이라 서로 얽히다 보니 중복 레코드값이 있습니다)

b테이블 받은 후에 수정해서 할 수도 있지만 회사 db에서 쿼리를 통해 바로 받으려고 공부하고 있는 상황입니다ㅠ

구글과 유튜브로 서브쿼리나 distinct같은 명령어가 있어서 따라해보았는제 위와 같은 경우는 찾아보질 못해서 이렇게 글을 남깁니다...너무 길어져서 죄송하고, 제가 확인해봐야 하는 것이라도 알려주시면 너무 감사하겠습니다^^

by 뉴비디비 [2021.04.03 22:15:01]

b데이터 원본에 중복이 있으니까 중복 제거 먼저하고 Join 하면 될꺼 같아요 

SELECT 
	a.sido_cd, b.cc_cod, SUM(a.person) 
FROM berkang.aaa a
	INNER JOIN ( SELECT DISTINCT cc_cod, dd_cod, ee_cod, ff_cod FROM berkang.bbb ) b ON a.sgg_cd = b.ee_cod
GROUP BY a.sido_cd, b.cc_cod;

 


by 베르강 [2021.04.04 23:21:24]

안녕하세요~ 답변감사드립니다ㅠ

구글링 하면서 DISTINCT도 사용해봤는데 안됐었는데 잘못따라했었네요ㅠㅠ

너무 감사드립니다~ 좋은 하루 보내세요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입