본문 바로가기

개발 문법/SQL

[Oracle] LISTAGG - 여러 행을 한 줄로 합치기

반응형
1. LISTAGG 함수란?
2. 기본 사용법
3. 주의할 점
4. 요약 정리

 

1. LISTAGG 함수란?

LISTAGG 함수는 여러 줄로 나뉜 데이터를 한 줄로 이어서 보여주고 싶을 때 사용하는 Oracle의 집계 함수입니다.

 

예를 들어, 같은 부서에 속한 직원 이름들을 쉼표로 연결해 한 문장으로 보여주고 싶을 때 사용합니다.

 

아래와 같은 데이터가 있다고 가정해봅시다.

부서명 이름
영업부 철수
영업부 영희
영업부 민수

 

이 데이터를 부서별로 모아서 보여주고 싶다면, LISTAGG 함수를 사용해서 이런 결과를 만들 수 있습니다.

 

영업부 : 철수, 영희, 민수

 

LISTAGG 함수는 여러 줄을 한 줄로 압축해서 원하는 구분자로 연결해주는 것이 핵심적인 기능입니다.

2. 기본 사용법

기본 문법은 이렇습니다.

 

SELECT 부서명,
    LISTAGG(이름, '구분자') WITHIN GROUP (ORDER BY 이름) AS 직원목록
FROM 직원테이블
GROUP BY 부서명;

 

- LISTAGG(이름, '구분자') : 이름들을 구분자로 구분해서 이어 붙이겠다는 의미

  • 구분자 : 쉼표(' , ')
    • SELECT DEPTNO, LISTAGG(NAME, ', ') WITHIN GROUP (ORDER BY NAME) AS TEST FROM EMP
    • A, B, C
  • 구분자 : 슬래시(' / ')
    • SELECT DEPTNO, LISTAGG(NAME, '/') WITHIN GROUP (ORDER BY NAME) AS TEST FROM EMP
    • A/B/C

- WITHIN GROUP (ORDER BY 이름) : 어떤 순서로 이름을 나열할지 지정

  • order by 에 따라 정렬 순서가 바뀔 수 있음

- GROUP BY 부서명 : 부서별로 결과를 묶기

 

3. 주의할 점

- 문자열 길이 제한

  • Oracle에서는 한 셀에 들어갈 수 있는 문자열 길이에 제한이 있음 (기본 4000byte)

- 순서 지정 필수

  • WITHIN GROUP (ORDER BY ...) 는 필수 항목이기에, 생략하면 오류 발생

- NULL 값 포함 안됨

  • 집계 대상 컬럼에 NULL 값인 행은 결과에 들어가지 않음

▶ 예시 데이터

DEPTNO   NAME
10   철수
10   영희
10   경수
20   민지
20   지민

 

▶ 결과

DEPTNO NAME
10 철수, 영희
20 민지, 지민

 

이렇게, NULL 인 이름은 결과에서 제외된 것을 확인할 수 있습니다.

 

4. 요약 정리

사용 목적 여러 행의 문자열을 한 줄로 합치기
대표 문법 LISTAGG(컬럼, '구분자') WITHIN GROUP (ORDER BY ...)
주의할 점 문자열 길이 제한, 정렬 필수, NULL 제외
함께 사용하는 구문 GROUP BY, ORDER BY

 

📌 TIP. 실무에서는 LISTAGG를 보고서 출력용, 통계 문자열 요약, 코드 목록 한 줄 출력 등 다양한 곳에서 활용할 수 있습니다!

 

반응형