반응형
오라클 11g 부터 사용할 수 있는 listagg 는 여러 row 데이터를 하나의 row로 문자열을 합쳐서 보여줄 수 있는 함수 입니다.
사용법은 아래와 같습니다.
테이블 생성.
create table user_hobby
(
user_name varchar2(200),
hobby varchar2(200)
)
데이터 삽입
insert into user_hobby (user_name, hobby) values ('아이유', '잠');
insert into user_hobby (user_name, hobby) values ('아이유', '노래');
insert into user_hobby (user_name, hobby) values ('아이유', '멍때리기');
insert into user_hobby (user_name, hobby) values ('아이유', '멍때리기');
insert into user_hobby (user_name, hobby) values ('아이유', '멍때리기');
listagg 예제 입니다.
SELECT
user_name,
LISTAGG( hobby || ',' ) WITHIN GROUP ( ORDER BY hobby) hobbys
FROM user_hobby
GROUP BY user_name;
결과
USER_NAME | HOBBYS |
---|---|
아이유 | 노래,멍때리기,멍때리기,멍때리기,잠, |
같은 데이터가 중복으로 있는 경우에 하나만 나오게 하고 싶습니다.
아래와 같이 정규식 치환을 이용하면 중복 데이터를 제거할 수 있습니다.
SELECT
user_name,
regexp_replace(LISTAGG( hobby || ',' ) WITHIN GROUP ( ORDER BY hobby), '([^,]+)(,\1)+', '\1') hobbys
FROM user_hobby
GROUP BY user_name;
결과
USER_NAME | HOBBYS |
---|---|
아이유 | 노래,멍때리기,잠, |
위 모든 예제는 http://sqlfiddle.com/#!4/c0b427/6 에서 실행해 보실 수 있습니다.
반응형
'Database' 카테고리의 다른 글
mysql 날짜 date_add, date_format (0) | 2017.12.17 |
---|---|
오라클 날짜 oracle date (0) | 2017.10.31 |
ORA-22835: 버퍼가 너무 작아 CLOB를 CHAR 또는 BLOB에서 RAW로 변환할 수 없습니다 (0) | 2017.10.29 |
oracle update join multiple tables - 오라클 다중 업데이트 (0) | 2017.10.24 |
오라클 - group by string concat oracle - 행 문자열 합치기 (0) | 2017.09.17 |
오라클 - 랜덤 함수oracle random (0) | 2017.09.01 |
Sql Developer 17002 (0) | 2017.08.21 |
오라클 날짜 - TO_DATE (0) | 2017.08.17 |