1. 중복 공백 제거
특정 문자열에 대해서 중복 공백 제거를 하고 싶다면 postgresql 정규식을 사용해서 가능하다.
(공백 외에 단일 문자에 대한 중복제거도 동일한 방법으로 가능하다.)
select regexp_replace(name, ' +', ' ', 'g') from TABLE; -- 'g' 옵션을 제거할 경우 최초 건에 대에서만 변경
2. 중복 단어 제거
컬럼 단위 중복제거는 distinct, group by를 통해 쉽게 가능하지만, 컬럼 내 문자열의 중복 단어 제거의 경우 다음과 같다.
(쉼표 기준으로 컬럼을 분리, 중복을 제거한 후 다시 연결)
select id, array_to_string(array_agg(distinct token), ' ') from (
SELECT unnest(string_to_array(COLUMN, ' ')) as token, id FROM TABLE) as tmp
group by id
3. 실습
3-1. 테이블 생성
-- 테스트 테이블 생성
create table duplicate_test (
id serial primary key,
name varchar(255) not null
);
3-2. 테스트 데이터 insert
-- 테스트 데이터 입력
insert into duplicate_test
(name)
values
('서울 서울 대구 서울 부산'),
('서울 서울 대구 서울'),
('부산 대구 대구 서울 서울서울 서울 광주'),
('서울 에서 대구 갔다가 부산 거쳐 다시 서울 로'),
('광주광주대구 대구 대 구 서울 '),
('서울 서울 서울 '),
('서울 대구 대 구 서울 '),
('서울 대구 대구 대 구 서울 '),
('서울 대구 대구 대구 부산부산 서울 부산 서울부 산')
;
3-3. 중복 공백 제거
select regexp_replace(name, ' +', ' ', 'g') from DUPLICATE_TEST; -- 'g' 옵션을 제거할 경우 최초 건에 대에서만 변경
select regexp_replace(name, '단일문자열+', ' ', 'g') from DUPLICATE_TEST; -- 단일문자열에 대한 중복 제거도 동일한 방법으로 가능하다.
3-4. 중복 단어 제거
select id, array_to_string(array_agg(distinct token), ' ') from (
SELECT unnest(string_to_array(name, ' ')) as token, id FROM DUPLICATE_TEST) as tmp
group by id
'Postgresql' 카테고리의 다른 글
[PostgreSQL] 미사용 인덱스(INDEX) 찾기 및 삭제, 성능향상 (0) | 2023.10.06 |
---|---|
ERROR: text search configuration name "english" must be schema-qualified (0) | 2023.10.05 |
[PostgreSQL] BRIN 인덱스의 원리 및 특징 (0) | 2023.09.18 |
[PostgreSQL] GIN인덱스의 원리 및 특징 (0) | 2023.09.13 |
[PostgreSQL] SP-GiST인덱스의 원리 및 특징 (0) | 2023.09.13 |