728x90
반응형
LISTAGG는 Oracle DB를 포함한 SQL 데이터베이스에서 여러 행의 값을 하나의 문자열로 집계(Aggregation) 할 때
사용하는 함수입니다.
주로 그룹화된 데이터를 문자열로 연결할 때 유용합니다.
📌 기본 문법
LISTAGG(column_name, 'delimiter') WITHIN GROUP (ORDER BY column_name)
- column_name: 연결할 열 이름
- 'delimiter': 각 값 사이에 넣을 구분자 (예: ',', ' | ', 등)
- WITHIN GROUP (ORDER BY ...): 연결할 값들의 정렬 순서를 지정
📌 예시
예제 테이블: STUDENT_COURSE
STUDENT_ID | COURSE_NAME |
1001 | Math |
1001 | Science |
1001 | History |
▶ LISTAGG 사용
SELECT
STUDENT_ID
, LISTAGG(COURSE_NAME, ', ') WITHIN GROUP (ORDER BY COURSE_NAME) AS COURSES FROM STUDENT_COURSE
GROUP BY STUDENT_ID;
결과:
STUDENT_ID | COURSES |
1001 | History, Math, Science |
📌 특징
- GROUP BY 와 함께 사용하여 그룹별 문자열 집계 가능
- WITHIN GROUP (ORDER BY ...) 로 정렬 순서 지정 가능
- Oracle 12c 이상에서는 LISTAGG(... ON OVERFLOW TRUNCATE) 를 사용하여 너무 긴 결과를 자를 수도 있음
📌 주의점
- 오류 발생 가능: 연결된 결과 문자열이 4000 byte(CHAR 기준) 이상이면 Oracle에서는 오류 발생 (ORA-01489)
- 중복 제거: 기본적으로 중복 제거는 안 됨 → DISTINCT 서브쿼리로 처리해야 함
SELECT LISTAGG(MTRM_NM, ', ') ... FROM ( SELECT DISTINCT MTRM_NM ... )
728x90
반응형
'DB' 카테고리의 다른 글
[DB][Oracle] ROWNUM / ROW_NUMBER() (0) | 2025.05.18 |
---|---|
[DB] LISTAGG / STRING_AGG (0) | 2025.05.16 |
[DB] DBMS별 기본 NULL 정렬 방식 (0) | 2025.04.13 |
[DB][Oracle] INSTR Null 처리 (0) | 2025.04.12 |
[DB][Oracle] INSTR (0) | 2025.04.11 |