빈쿵바라기
좌충우돌 개발자의 기록
빈쿵바라기
전체 방문자
오늘
어제
  • 분류 전체보기 (53)
    • Programming (25)
      • JAVA (12)
      • Spring Boot (6)
      • JPA (7)
      • Python (0)
    • Database (12)
      • RDBMS (4)
      • NoSQL (7)
    • Server (11)
    • Elasticsearch (3)
    • ETC (2)

블로그 메뉴

    공지사항

    인기 글

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    빈쿵바라기

    좌충우돌 개발자의 기록

    [PostgreSQL] 중복데이터 삭제 방법(중복데이터 하나만 남기고 제거)
    Database/RDBMS

    [PostgreSQL] 중복데이터 삭제 방법(중복데이터 하나만 남기고 제거)

    2023. 1. 31. 11:03

     

    테이블에 중복된 데이터가 있을 때 중복된 데이터에서 한개만 남기고 나머지를 제거해야 하는 이슈가 있었다.

    여기서 중복이라는 것은 유일할 것이라고 생각하는 컬럼의 데이터가 여러개 있을 경우를 말한다. (애초에 pk 또는 unique key를 잡았다면 문제가 없었을 것이다.)

    DELETE FROM table_name
    where ctid in (
    	SELECT A.ctid
    	FROM (
    	    SELECT ctid,
    	         ROW_NUMBER() over (PARTITION BY column_name ORDER BY column_name desc) AS num
    	    FROM table_name
    	) A
    	WHERE A.num > 1
    )

    중복을 제거할 테이블에서 중복 체크할 컬럼을 PARTITION으로 묶어 ORDER BY 순으로 번호를 매기고, 1번을 제외한 모든 row를 제거하는 SQL문이다.  ctid는 테이블 내부 행 버전의 물리적 위치를 나타낸다.

     

    만약 중복 체크할 컬럼이 여러개라면 PARTITON BY 뒤에 모두 적어주면 된다.

    PARTITION BY column_name1, column_name2, column_name2 ORDER BY column_name desc
    저작자표시 (새창열림)

    'Database > RDBMS' 카테고리의 다른 글

    [PostgreSQL] 읽기 전용 유저 생성  (0) 2023.04.27
    [PostgreSQL] VIEW vs MVIEW(Materialized View)  (0) 2022.08.19
    [PostgreSQL] JSON 컬럼에 특정 값만 추출해서 Index를 걸어보자  (0) 2022.08.12
      'Database/RDBMS' 카테고리의 다른 글
      • [PostgreSQL] 읽기 전용 유저 생성
      • [PostgreSQL] VIEW vs MVIEW(Materialized View)
      • [PostgreSQL] JSON 컬럼에 특정 값만 추출해서 Index를 걸어보자
      빈쿵바라기
      빈쿵바라기
      삽질하는 개발자의 좌충우돌 개발기

      티스토리툴바