[mariaDB/mysql] 중복데이터 조회 및 삭제하기
2021. 9. 2. 10:55ㆍIT개발/Database
반응형
통계데이터를 다루는데 중복데이터가 존재하여 삭제해야할 필요가 생겼다.
하여 아래와 같이 몇개 쿼리를 만들어 보았다.
/* 중복데이터 조회하기1 (총 중복대상이 몇개인지 파악하기) */
SELECT DF_CD, YEAR, MONTH, PORT, PRD_CD, CNT, AMOUNT, STD_DE, COUNT(ID)
FROM w_stats1
GROUP BY DF_CD, YEAR, MONTH, PORT, PRD_CD, CNT, AMOUNT, STD_DE
HAVING COUNT(ID) >1
/* 중복데이터 조회하기2 (중복되는 녀석들이 대체 어떤녀석들인지 멱살좀잡아보기) */
SELECT
*
FROM w_stats1 A,
(
SELECT DF_CD, YEAR, MONTH, PORT, PRD_CD, CNT, AMOUNT, STD_DE, COUNT(ID)
FROM w_stats1
GROUP BY DF_CD, YEAR, MONTH, PORT, PRD_CD, CNT, AMOUNT, STD_DE
HAVING COUNT(ID) >1
) B
WHERE A.DF_CD = B.DF_CD
AND A.YEAR = B.YEAR
AND A.MONTH = B.MONTH
AND A.PORT = B.PORT
AND A.PRD_CD = B.PRD_CD
AND A.CNT = B.CNT
AND A.AMOUNT = B.AMOUNT
AND A.STD_DE = B.STD_DE
ORDER BY A.DF_CD, A.YEAR, A.MONTH, A.PORT, A.PRD_CD, A.CNT, A.AMOUNT, A.STD_DE
/* 중복데이터 중 ID와 늦게 추가된 MAX(ID) 조회하기 */
SELECT ID, MAX(ID), COUNT(ID)
FROM w_stats1
GROUP BY DF_CD, YEAR, MONTH, PORT, PRD_CD, CNT, AMOUNT, STD_DE
HAVING COUNT(ID) >1
/* 중복데이터 중 늦게 추가된 MAX(ID) 삭제하기 */
DELETE A
FROM w_stats1 A
INNER JOIN (SELECT MAX(ID) AS ID
FROM w_stats1
GROUP BY DF_CD, YEAR, MONTH, PORT, PRD_CD, CNT, AMOUNT, STD_DE
HAVING COUNT(ID) >1) B
ON A.ID = B.ID
위 캡쳐화면과 같이 2개 이상의 중복데이터를 502 건 확인할수 있다.
자 이제 지워보자! 지우긴 지워야겠는데 기준이 있어야겠지?
더 늦게 들어간 녀석들을 지우자! 더늦게 들어갔다는 말은 ID 가 자동증분되니 둘중 MAX값이겠군!
/* 중복데이터 중 늦게 추가된 MAX(ID) 삭제하기 */ 실행하면 끝!
반응형
'IT개발 > Database' 카테고리의 다른 글
윈도우에서 Mariadb 설치 실패시 해결방법(mariadb wizard ended prematurely because of an error) (0) | 2022.01.17 |
---|---|
FLUSH PRIVILEGES; | mysql 데이터베이스에서 db 테이블에 사용자의 권한 수동반영시, 적용 명령어 (0) | 2021.11.26 |
mysql/mariadb 현재 시간 및 타임존 확인하기 (0) | 2021.08.10 |
[mysql/mariaDB] 원격지DB에서 로컬PC로 바로 export (0) | 2021.03.09 |
[mysql/mariaDB] dump export/import 하기 (0) | 2021.03.09 |