by 베르강 [SQL Query] JOIN 중복레코드 [2021.04.03 10:09:07]
민망하지만 잘 풀리지 않아 이리저리 찾다가 게시판이 있어서 글을 남깁니다. 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같은 명령어가 있어서 따라해보았는제 위와 같은 경우는 찾아보질 못해서 이렇게 글을 남깁니다...너무 길어져서 죄송하고, 제가 확인해봐야 하는 것이라도 알려주시면 너무 감사하겠습니다^^