반응형
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를 보고서 출력용, 통계 문자열 요약, 코드 목록 한 줄 출력 등 다양한 곳에서 활용할 수 있습니다!
반응형
'개발 문법 > SQL' 카테고리의 다른 글
| [Oracle] LEFT OUTER JOIN 문법과 예제 (0) | 2025.11.15 |
|---|---|
| [Oracle] OVER (PARTITION BY / ORDER BY) 문법과 예제 - 순위/집계 윈도우 함수 활용하기 (14) | 2025.10.12 |
| [Oracle] MERGE 문법과 예제 - INSERT/UPDATE 통합하기 (12) | 2025.09.28 |
| JOIN 이란 (0) | 2022.04.02 |
| UNION 과 UNION ALL 이란 (4) | 2022.03.14 |