LISTAGG¶
delimiter
문자열로 구분된 연결된 입력 값을 반환합니다.
구문¶
집계 함수
LISTAGG( [ DISTINCT ] <expr1> [, <delimiter> ] ) [ WITHIN GROUP ( <orderby_clause> ) ]
윈도우 함수
LISTAGG( [ DISTINCT ] <expr1> [, <delimiter> ] )
[ WITHIN GROUP ( <orderby_clause> ) ]
OVER ( [ PARTITION BY <expr2> ] )
인자¶
expr1
목록에 넣을 값을 결정하는 식(일반적으로 열 이름)입니다. 식은 문자열로 평가되거나, 문자열로 캐스팅될 수 있는 데이터 타입으로 평가되어야 합니다.
delimiter
문자열 또는 문자열로 평가되는 식입니다. 실제로 이는 일반적으로 단일 문자 문자열입니다. 문자열은 아래 예와 같이 작은따옴표로 묶어야 합니다.
delimiter
문자열을 지정하지 않는 경우, 빈 문자열이delimiter
로 사용됩니다.delimiter
는 상수여야 합니다.expr2
이 식은 파티션의 행을 그룹화하는 데 사용됩니다.
orderby_clause
목록에서 값의 순서를 결정하는 식(일반적으로 열 이름)입니다.
반환¶
delimiter
로 구분된, NULL 이외의 모든 입력 값을 포함하는 문자열을 반환합니다.
(이는 《목록》을 반환하지 않는다는 점에 유의하십시오(예: ARRAY를 반환하지 않으며, NULL 이외의 모든 입력 값을 포함하는 단일 문자열을 반환합니다.)
사용법 노트¶
이 함수에는
DISTINCT
가 지원됩니다.WITHIN GROUP (<orderby_절>)
을 지정하지 않으면 각 목록 내의 요소 순서를 예측할 수 없습니다. (WITHIN GROUP 절 외부의ORDER BY
절은 행 내 목록 요소의 순서가 아니라 출력 행의 순서에 적용됩니다.)DISTINCT
및WITHIN GROUP
을 지정하는 경우, 둘 다 동일 열을 참조해야 합니다. 예:SELECT listagg(DISTINCT O_ORDERKEY) WITHIN GROUP (ORDER BY O_ORDERKEY) ...;
DISTINCT
및WITHIN GROUP
에 대해 서로 다른 열을 지정하면 다음과 같이 오류가 발생합니다.SELECT listagg(DISTINCT O_ORDERKEY) WITHIN GROUP (ORDER BY O_ORDERSTATUS) ...;
SQL compilation error: [ORDERS.O_ORDERSTATUS] is not a valid order by expression
DISTINCT
및WITHIN GROUP
에 대해 동일 열을 지정하거나DISTINCT
를 생략해야 합니다.NULL 또는 빈 입력 값과 관련하여:
입력이 비어 있으면 빈 문자열이 반환됩니다.
모든 입력 식이 NULL로 평가되면 출력은 빈 문자열입니다.
모든 입력 식이 아니라 일부 식이 NULL로 평가되면 출력에는 NULL 이외의 모든 값이 포함되고 NULL 값은 제외됩니다.
윈도우 함수로서 사용할 때 이 함수는 다음을 지원하지 않습니다.
OVER() 절의 ORDER BY 하위 절.
윈도우 프레임.
데이터 정렬 세부 정보¶
The collation of the result is the same as the collation of the input.
ORDER BY 하위 절이 데이터 정렬이 있는 식을 지정한 경우, 목록 내의 요소는 데이터 정렬에 따라 정렬됩니다.
delimiter
는 데이터 정렬 사양을 사용할 수 없습니다.ORDER BY 내에서 데이터 정렬을 지정해도 이는 결과의 데이터 정렬에 영향을 미치지 않습니다. 예를 들어, 아래 문에는 두 개의
ORDER BY
절이 포함되어 있는데, 하나는LISTAGG
용이고 다른 하나는 쿼리 결과용입니다. 첫 번째 절 내에서 데이터 정렬을 지정해도 이는 두 번째 절의 데이터 정렬에 영향을 미치지 않습니다. 두 ORDER BY 절에서 출력 데이터를 정렬해야 하는 경우, 두 절에서 명시적으로 데이터 정렬을 지정해야 합니다.select listagg(x, ', ') within group (ORDER BY last_name collate 'sp') from table1 ORDER BY last_name;
예¶
SELECT listagg(O_ORDERKEY, ' ')
FROM orders WHERE O_TOTALPRICE > 450000;
---------------------------------------------+
LISTAGG(O_ORDERKEY, ' ') |
---------------------------------------------+
41445 55937 67781 80550 95808 101700 103136 |
---------------------------------------------+
SELECT listagg(DISTINCT O_ORDERSTATUS, '|')
FROM orders WHERE O_TOTALPRICE > 450000;
--------------------------------------+
LISTAGG(DISTINCT O_ORDERSTATUS, '|') |
--------------------------------------+
F|O |
--------------------------------------+
SELECT O_ORDERSTATUS, listagg(O_CLERK, ', ') WITHIN GROUP (ORDER BY O_TOTALPRICE DESC)
FROM orders WHERE O_TOTALPRICE > 450000 GROUP BY O_ORDERSTATUS;
---------------+--------------------------------------------------------------------+
O_ORDERSTATUS | LISTAGG(O_CLERK, ', ') WITHIN GROUP (ORDER BY O_TOTALPRICE DESC) |
---------------+--------------------------------------------------------------------+
O | Clerk#000000220, Clerk#000000411, Clerk#000000114 |
F | Clerk#000000508, Clerk#000000136, Clerk#000000521, Clerk#000000386 |
---------------+--------------------------------------------------------------------+
다음 예는 LISTAGG
를 사용한 데이터 정렬을 보여줍니다. 다른 데이터 정렬 사양을 사용한 출력 순서의 차이에 유의하십시오.
-- Collation SELECT LISTAGG(spanish_phrase, '|') WITHIN GROUP (ORDER BY COLLATE(spanish_phrase, 'sp')) FROM collation_demo GROUP BY english_phrase; +---------------------------------------------------------------+ | LISTAGG(SPANISH_PHRASE, '|') | | WITHIN GROUP (ORDER BY COLLATE(SPANISH_PHRASE, 'SP')) | |---------------------------------------------------------------| | piña colada|Pinatubo (Mount)|pint|Pinta | +---------------------------------------------------------------+ -- Different collation. SELECT LISTAGG(spanish_phrase, '|') WITHIN GROUP (ORDER BY COLLATE(spanish_phrase, 'utf8')) FROM collation_demo GROUP BY english_phrase; +-----------------------------------------------------------------+ | LISTAGG(SPANISH_PHRASE, '|') | | WITHIN GROUP (ORDER BY COLLATE(SPANISH_PHRASE, 'UTF8')) | |-----------------------------------------------------------------| | Pinatubo (Mount)|Pinta|pint|piña colada | +-----------------------------------------------------------------+