PostgreSQL에서 중복을 제거하는 방법은 다음과 같습니다.
로직의 원리는 중복되지 않는 데이터의 id만을 필터링해서 해당 id가 아닌 id를 제거하는 로직입니다.
1. 중복 제거하고자 하는 컬럼들만 group by 해서 가장 앞의 id만 남기는 로직
DELETE FROM table_name
WHERE id NOT IN (
SELECT MIN(id)
FROM table_name
GROUP BY column_name
);
2. 중복 제거하고자 하는 컬럼들을 기준으로 rank를 매긴 다음에, 가장 앞의 id만 남긴다.
DELETE FROM table_name
WHERE id IN (
SELECT T.id
FROM (
SELECT id
, ROW_NUMBER() OVER(PARTITION BY column1, column2 ORDER BY id) AS rows
FROM table_name
) as T
WHERE T.rows > 1
);
CF) Mysql
원리는 postgresql의 1번 로직과 같다.
DELETE t1 FROM table_name t1
JOIN (
SELECT MIN(id) as id, column_name
FROM table_name
GROUP BY column_name
) t2 ON t1.column_name = t2.column_name AND t1.id > t2.id;
728x90
반응형
'SQL & DB > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] CSV File를 Table에 삽입(Import)하기. (2) | 2023.03.05 |
---|---|
[PostgreSQL] 값 비교 - 조건을 0과 1로 표현하기 (0) | 2023.03.05 |
[PostgreSQL] 사용자 로그데이터(Log Data) 시계열분석(2) - 행동(action)과 지속률/정착률과의 관계 분석 (0) | 2021.01.22 |
[PostgreSQL] 사용자 로그데이터(Log Data) 시계열분석(1) - 등록추이분석/지속률/정착률 (0) | 2021.01.18 |
[PostgreSQL] 사용자 로그데이터(Log Data) 매출분석(3) - RFM 분석 (0) | 2021.01.15 |