LISTAGG 집계 함수

LISTAGG 함수는 문자열을 병합하여 일련의 문자열 요소를 하나의 문자열로 집계합니다. 선택적으로 인접한 입력 문자열 사이에 삽입되는 구분자 문자열을 제공할 수 있습니다.

Read syntax diagramSkip visual syntax diagramLISTAGG( ALLDISTINCTstring-expression ,separator ) WITHIN GROUP(ORDER BY,sort-keyASCDESC)

스키마는 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를 처리합니다.

결과

LISTAGG의 결과 데이터 유형은 string-expression의 데이터 유형을 기반으로 합니다.
표 1. 결과 데이터 유형 및 길이 판별
string-expression의 데이터 유형 결과 데이터 유형 및 길이
CHAR(n) 또는 VARCHAR(n) VARCHAR (최대 (4000, n))
GRAPHIC(n) 또는 VARGRAPHIC(n) VARGRAPHIC (MAX (2000, n))
BINARY(n) 또는 VARBINARY(n) VARBINARY (최대 (4000, n))
결과 데이터 유형의 문자열 단위는 string-expression 데이터 유형의 문자열 단위와 동일합니다.
파생된 크기가 결과의 크기를 판별하는 데 사용되는 경우 결과 데이터 유형은 VARCHAR (4000), VARBINARY (4000) 또는 VARGRAPHIC (2000) 을 초과할 수 있으며 결과 데이터 유형의 경우 최대 입니다. 다음 예는 VARCHAR(10000)의 리턴 데이터 유형을 성공적으로 나타냅니다.
   LISTAGG(CAST(NAME AS VARCHAR(10000)), ',')

집계된 결과 문자열의 실제 길이가 결과 데이터 유형의 최대값을 초과하는 경우 오류가 리턴됩니다(SQLSTATE 22001).

결과는 널(null)일 수 있습니다. 함수가 빈 세트에 적용되거나 세트의 모든 string-expression 값이 널(NULL) 값인 경우 결과는 널(NULL) 값입니다.

규칙

  • LISTAGG로 DISTINCT가 지정된 경우 ORDER BY 스펙의 sort-keystring-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