LISTAGG 집계 함수
LISTAGG 함수는 문자열을 병합하여 일련의 문자열 요소를 하나의 문자열로 집계합니다. 선택적으로 인접한 입력 문자열 사이에 삽입되는 구분자 문자열을 제공할 수 있습니다.
스키마는 SYSIBM입니다.
LISTAGG 함수는 WITHIN GROUP절에 지정된 순서에 따라 string-expression 값을 추가하여 그룹의 문자열 값 세트를 하나의 문자열로 집계합니다.
함수는 널(NULL) 값을 제거하여 첫 번째 인수에서 파생된 값 세트에 적용됩니다. DISTINCT가 지정된 경우 중복 string-expression 값이 제거됩니다. 널(NULL) 값이 아닌 separator 인수가 지정되는 경우 널(NULL)이 아닌 string-expression 값의 각 쌍 사이에 해당 값이 삽입됩니다.
- 문자열 표현식
- 집계할
문자열 값을 지정하는 표현식입니다. 표현식은 내장 문자열, 그래픽 문자열, 2진 문자열, 숫자 값, 부울 값또는 날짜 시간 값을 리턴해야 합니다.
- 값이 문자열, 그래픽 문자열 또는 2진 문자열이 아니거나 값이 CLOB인 경우 함수를 평가하기 전에 값이 내재적으로 VARCHAR로 캐스트됩니다.
- 값이 DBCLOB인 경우 함수가 평가되기 전에 내재적으로 VARGRAPHIC으로 캐스트됩니다.
- 값은 BLOB일 수 없습니다(SQLSTATE 42815).
- 분리자
- 널(NULL)이 아닌
string-expression 값 사이에 사용되는 구분 문자열을
정의하는 상수식입니다. 표현식은 내장 문자열, 숫자 또는 날짜 및 시간
데이터 유형인 값을 리턴해야 합니다. 값이 문자열 데이터 유형이 아닌 경우
함수가 평가되기 전에 내재적으로 VARCHAR로 캐스트됩니다. CLOB 및 DBCLOB은 내재된
캐스팅을 통해 지원됩니다. 값이 CLOB인 경우 함수가 평가되기 전에 내재적으로
VARCHAR로 캐스트됩니다. 값이 DBCLOB인 경우 함수가 평가되기 전에 내재적으로
VARGRAPHIC으로 캐스트됩니다. separator의 데이터 유형은 BLOB이 될 수 없습니다(SQLSTATE 42815).
표현식에 비결정 함수 또는 외부 조치를 사용하는 함수가 포함되지 않은 경우 상수, 특수 레지스터 또는 변수에 따라 구분자는 상수, 특수 레지스터, 변수 또는 표현식이 될 수 있습니다.
- WITHIN GROUP
- 집계가 그룹화 세트 내에 지정된 순서를 준수함을 표시합니다.
WITHIN GROUP이 지정되지 않고 다른 LISTAGG, ARRAY_AGG 또는 XMLAGG가 지정된 순서와 동일한 SELECT절에 포함되지 않은 경우 결과 내의 문자열 순서는 결정적이지 않습니다. WITHIN GROUP이 지정되지 않고 동일한 SELECT절에 순서를 지정하는 XMLAGG, ARRAY_AGG 또는 LISTAGG의 다중 어커런스가 있는 경우 LISTAGG 함수 호출 결과에 대해 동일한 순서가 사용됩니다.
- ORDER BY
- 집계에서 처리되는 동일한 그룹 세트의 행 순서를 지정합니다. ORDER BY 절이 컬럼 데이터의 순서를 구별할 수 없는 경우에는 동일 그룹화 세트의 행은 임의로 순서가 지정됩니다.
- 정렬 키
- 정렬 키는 컬럼 이름 또는 sort-key-expression일 수 있습니다. 정렬 키가 상수인 경우 출력 컬럼의 위치를 나타내지 않으며(쿼리의 ORDER BY절에서처럼), 이는 정렬 키가 없음을 의미하는 상수입니다.
- ASC
- 오름차순으로 sort-key를 처리합니다. 이는 기본 옵션입니다.
- DESC
- 내림차순으로 sort-key를 처리합니다.
결과
string-expression의 데이터 유형 | 결과 데이터 유형 및 길이 |
---|---|
CHAR(n) 또는 VARCHAR(n) | VARCHAR (최대 (4000, n)) |
GRAPHIC(n) 또는 VARGRAPHIC(n) | VARGRAPHIC (MAX (2000, n)) |
BINARY(n) 또는 VARBINARY(n) | VARBINARY (최대 (4000, n)) |
LISTAGG(CAST(NAME AS VARCHAR(10000)), ',')
집계된 결과 문자열의 실제 길이가 결과 데이터 유형의 최대값을 초과하는 경우 오류가 리턴됩니다(SQLSTATE 22001).
결과는 널(null)일 수 있습니다. 함수가 빈 세트에 적용되거나 세트의 모든 string-expression 값이 널(NULL) 값인 경우 결과는 널(NULL) 값입니다.
규칙
- LISTAGG로 DISTINCT가 지정된 경우 ORDER BY 스펙의 sort-key는 string-expression과 일치해야 합니다(SQLSTATE 42822). string-expression이 내재적으로 캐스트되는 경우 sort-key에는 해당 일치 캐스트 스펙이 명시적으로 포함되어 있어야 합니다.
- SELECT절에
ARRAY_AGG 함수가 포함된 경우 동일한 SELECT절의 모든 ARRAY_AGG, LISTAGG, XMLAGG
및 XMLGROUP 함수 호출은 다음 기준 중 하나와 일치해야 합니다(SQLSTATE 428GZ).
- 동일한 순서 지정
- 순서를 지정하지 않음
- LISTAGG가 DISTINCT인 string-expression 인수를 ARRAY_AGG에 있는 ORDER BY절의 sort-key 표현식과 일치시키십시오.
- LISTAGG는 OLAP 스펙의 일부로 사용될 수 없습니다(SQLSTATE 42887).
예
SELECT workdept,
LISTAGG(lastname, ', ') WITHIN GROUP(ORDER BY lastname)
AS employees
FROM emp
GROUP BY workdept