스노우보드 참 좋아하는데 맨날 키보드 앞에만 있네

[ORACLE] 다중 ROW를 그룹화하여 하나의 컬럼으로 조회하기 (LISTAGG WITHIN GROUP 함수) 본문

개발/Oracle SQL

[ORACLE] 다중 ROW를 그룹화하여 하나의 컬럼으로 조회하기 (LISTAGG WITHIN GROUP 함수)

워너-비 2019. 12. 17. 16:37

ORACLE LISTAGG... WITHIN GROUP 함수 사용법


 

오늘은 ORACLE 환경에서 여러 ROW의 데이터를 그룹화하여 하나의 컬럼으로 합치는 방법에 대해 알아보겠다.

바로 LISTAGG 함수인데, 이를 통해 GROUP BY 대상이 아닌 컬럼의 문자열을 단일 ROW로 모아서 조회할 수 있다.

이 함수는 ORACLE 11G R2 버전부터 사용이 가능하다.

 


 

[사용법]

1. 테스트 테이블 생성

음악 리스트의 정보를 담을 TB_SONGLIST 라는 이름의 테이블을 생성한다.

컬럼은 가수와 곡명을 담기 위해 각각 SINGER, SONGNAME 이라 하자.

 

1
2
3
4
5
6
CREATE TABLE TB_SONGLIST
(
  SINGER VARCHAR2(20),
  SONGNAME VARCHAR2(100)
 
);

 

 

2. 데이터 삽입

가수와 노래 데이터를 삽입한다.

 

1
2
3
4
5
INSERT INTO TB_SONGLIST VALUES ('성시경''희재');
INSERT INTO TB_SONGLIST VALUES ('성시경''내게오는길');
INSERT INTO TB_SONGLIST VALUES ('성시경''우리제법잘어울려요');
INSERT INTO TB_SONGLIST VALUES ('임창정''또다시사랑');
INSERT INTO TB_SONGLIST VALUES ('임창정''흔한노래');

 

 

3. LISTAGG를 이용한 조회

 

1
2
3
4
5
SELECT 
  SINGER,
 LISTAGG(SONGNAME || ', ' ) WITHIN GROUP ( ORDER BY SONGNAME) SONGNAMES
FROM TB_SONGLIST
GROUP BY SINGER;
 

 

 

>> 조회결과

SINGER         SONGNAMES

----------------------------------------------------

성시경          내게오는길, 우리제법잘어울려요, 희재

임창정          또다른사랑, 흔한노래

 


 

끝.

Comments