안녕하세요.
데이터를 관리함에 있어서 비효율적인 부분들이 있는데 경험이 부족해서 전문가의 조언을 구하고자 합니다.
postgreSQL을 사용합니다.
지금의 상태는
최초 데이터는 엑셀파일로 받습니다. (수십만개의 리스트)
이 데이터에는 100개 안팍의 중복되는 partNum이 존재합니다.
(실제 사용되는 db에는 partNum이 P Key 로 되어 있기 때문에 등록이 안됩니다.) 그래서 중복값 제거를 위해
excel -> .csv 로 출력해서 임시테이블에 등록해서 중복데이터를 확인.
엑셀에서 확인된 데이터들을 정리합니다.
정리된 원본 엑셀파일을 두개의 테이블로 나누어 등록해야 합니다. partNum을 외래키로 해서 ...
테이블 1 : partNum, description, newP_Num
테이블 2 : partNum, cost, msrp
각각 .csv로 출력하고
partNum 을 외래키로 연결되어 있는 테이블에 import 해서 등록합니다.
이 중 가장 손이 많이 가는 부분은 중복데이터를 확인해서 엑셀에서 다시 정리해야 하는 부분입니다.
효과적인 방법이 없을까요?
답변주셔서 감사합니다.
중복데이터 검색할때 조건문을 이용해서 삭제할 목록만을 select한다면 그나마 엑셀에서 작업하기가 수훨할 것 같습니다.
5개의 컬럼이 있는 테이블에
no | partNum | description | newP_Num | cost
SELECT * FROM CheckParts
WHERE partNum IN
(
SELECT partNum FROM CheckParts GROUP BY partNum HAVING COUNT(*)>1
) ORDER BY partNum, cost;
이처럼 중복 데이터를 정렬해서 조회는 했습니다.
이때 삭제할 리스트 목록만을 출력하고 싶은데요.
조건은
중복되는 partNum 중에 newP_Num가 있는 경우 newP_Num이 없는 리스트를 출력
중복되는 partNum 중에 모두 newP_Num 이 없다면 cost 로 비교해서 낮은 값을 출력
중복되는 partNum 중에 이도저도 아니면 둘중 하나만 출력
하려고 합니다.
sql 문에서 조건문을 낯설어서 열심히 검색중입니다. (db는 postgreSQL)
중복되는 리스트 중에 조건문을 달아야 하는데 어렵네요..
-- 임시테이블에서 중복제거한 목록을 바로 뽑아 입력하기 -- INSERT INTO 테이블1(partNum, description, newP_Num) SELECT partNum, description, newP_Num FROM (SELECT no, partNum, description, newP_Num, cost , ROW_NUMBER() OVER(PARTITION BY partNum ORDER BY newP_Num, cost DESC, no) rn FROM CheckParts ) a WHERE rn = 1 ; INSERT INTO 테이블2(partNum, cost) SELECT partNum, cost FROM (SELECT no, partNum, description, newP_Num, cost , ROW_NUMBER() OVER(PARTITION BY partNum ORDER BY newP_Num, cost DESC, no) rn FROM CheckParts ) a WHERE rn = 1 ; -- 임시테이블에서 중복 자료 삭제하기 -- DELETE FROM CheckParts WHERE no IN (SELECT no FROM (SELECT no , ROW_NUMBER() OVER(PARTITION BY partNum ORDER BY newP_Num, cost DESC, no) rn FROM CheckParts ) a WHERE rn > 1 ) ;