SQL & DB/PostgreSQL

[PostgreSQL] 중복행 제거

YSY^ 2023. 2. 18. 18:36

 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
반응형