728x90
반응형

Oracle 오라클 중복 데이터 찾는 방법


 

이번 포스팅에서는 중복된 데이터를 찾는 방법에 대해서 알아보도록 하겠습니다.


보통 실무에서 시스템이 없는 고객이 관리하고 있는 데이터는 

엑셀이나 기타 스프레드시트로 관리하는 경우가 많습니다.

이렇게 관리된 데이터는 중복이나 Null값이 존재할 수 밖에 없기 때문

데이터 베이스 설계 시 데이터의 무결성을 유지하기 위해

유니크(Unique)하고 Null 값을 포함하지 않는 Key 값을 설정해야 합니다.

(모든 데이터가 중복이 있다면 일련번호 같은 Key를 설정해야겠죠.)


이럴 때! 중복된 데이터를 찾는 방법이 아주 유용하게 사용됩니다.


그럼 실제로 중복된 데이터를 추출해보도록 하죠.


CM_KIK_B라는 테이블이 있습니다. 대한민국 법정동코드가 들어있는 테이블인데요.

굳이 구굴링까지 안하셔도 구할 수 있는 OpenAPI 입니다.



간단히 중복된 데이터를 찾는 방법은 

중복된 데이터를 찾고자 하는 컬럼으로 GROUP BY 한 후에 HAVING 절로 COUNT 가 1 이상인 것을 

SELECT 하면 됩니다.

(GROUP BY 와 HAVING 절의 사용의 아래의 Link 를 참조하세요.)


Link : 오라클 그룹함수 SUM, AVG, MAX, MIN, COUNT의 사용 GROUP BY HAVING


전국적으로 중복되는 '동(KIKB_DONG_NM)' 을 찾아보도록 합시다.



SELECT T1.KIKB_DONG_NM

           , COUNT(*)

  FROM CM_KIK_B T1

 GROUP BY T1.KIKB_DONG_NM

 HAVING COUNT(*) > 1 ;




[결과]



각 동에 대한 중복된 숫자가 나왔습니다. 교동은 전국적으로 18개나 있네요.



분석함수를 사용하여 중복된 데이터를 SELECT 할 수도 있습니다.




SELECT T1.*

  FROM (

        SELECT S1.KIKB_DO_NM

                  , S1.KIKB_DONG_NM

                  , COUNT(*) OVER(PARTITION BY S1.KIKB_DONG_NM) AS OVERLAP

          FROM CM_KIK_B S1

          ) T1

  WHERE T1.OVERLAP > 1 ;




[결과]



이번엔 시도 도 같이 SELECT 해왔습니다. 각 중복된 '동'에 대해서 그 동이 어느 '시도'에 있는지 확인 할 수 있죠.


(위에서 사용된 서브쿼리의 사용은 아래의 Link를 참조하세요.)


Link : Subquery 서브쿼리사용법, ALL, ANY, IN, EXISTS


중복되는 데이터를 찾았으니 찾은 데이터를 삭제 해야 하는 경우 아래를 Link를 참조하세요.


Link : Oracle 오라클 중복 데이터 제거, ROWID



 



출처: http://aljjabaegi.tistory.com/86 [알짜배기 프로그래머]

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,