[오라클 SQL] LISTAGG 중복제거 하는 방법(정규식)


안녕하세요.

오늘은 오라클 SQL에서 LISTAGG 사용시, 중복된 데에터를 제거하는 방법에 대해서 알려드리고자 합니다.

 

정규식을 이용해서 중복 제거를 할 수 있기 때문에, 해당 내용을 숙지하시면 나중에 LISTAGG 사용시 매우 유용하게 사용하실 수 있는 문법이 될 거라 생각합니다.


 

아래 STUDENT 테이블이 있습니다.

 

STUDET 테이블



위에 있는 STUDENT 테이블에서 LISTAGG를 통해서 NAME 컬럼을 하나의 행으로 LISTAGG를 이용해서 조회해 보도록 하겠습니다.

 

LISTAGG 이용하여 NAME 조회하기


1

2

3

SELECT LISTAGG (stu.NAME, ',') WITHIN GROUP (ORDER BY GRADE) AS NAME

FROM WIN.STUDENT stu

WHERE 1 = 1

Colored by Color Scripter

cs

 

실행 결과


LISTAGG를 이용해서 NAME들을 조회해 보니까 현재 범범조조라는 사람이 3번 중복되어서 조회된 것을 확인하실 수 있습니다.

 

그럼 이제 이 중북된 데이터를 정규식을 이용해서 제거해 보도록 하겠습니다.

 

LISTAGG 중복 제거


1

2

3

SELECT REGEXP_REPLACE(LISTAGG (stu.NAME, ',') WITHIN GROUP (ORDER BY GRADE), '([^,]+)(,\1)+''\1') AS NAME

FROM WIN.STUDENT stu

WHERE 1 = 1

Colored by Color Scripter

cs


실행 결과




위와 같이 중복된 데이터가 지워지고, 중복 없이 데이터가 알맞게 조회된 것을 확인하실 수 있습니다.

 

감사합니다.^^

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY