최종 수정: 에
ARRAY_SORT
설명
lambda 함수를 지정하지 않으면 배열 요소를 오름차순으로 정렬합니다. 그렇지 않으면 lambda 함수에 따라 정렬합니다.
구문
ARRAY_SORT(<arr>)
ARRAY_SORT(<lambda>, <arr>)
매개변수
| 매개변수 | 설명 |
|---|---|
<arr> | numeric, boolean, string, datetime, IP, UUID 등 지원되는 타입의 요소를 포함하는 ARRAY입니다. 다차원 배열을 지원하지만, 중첩된 모든 요소도 이러한 지원 타입이어야 합니다. |
<lambda> | 두 요소를 받아 첫 번째 요소가 두 번째 요소보다 작으면 -1, 같으면 0, 크면 1을 반환하는 선택적 비교 함수입니다. |
반환 값
lambda표현식을 포함하지 않는 경우- 입력과 동일한 타입의
ARRAY<T>를 반환합니다. NULL요소는 반환되는 배열의 맨 앞에 배치됩니다.
- 입력과 동일한 타입의
lambda표현식을 포함하는 경우, lambda 표현식에 따라 정렬하고 입력과 동일한 타입의ARRAY<T>를 반환합니다.
Doris 4.1 시리즈에서는 4.1.5부터 외부 lambda의 인수나 다른 컬럼을 참조하는 비교 함수를 사용하면 명시적인 오류가 발생합니다. 비교 함수는 자신의 두 인수만 사용할 수 있으며, 그 안에 중첩된 lambda는 해당 비교 함수의 인수를 캡처할 수 없습니다. 이 제한은 ARRAY_MAP의 일반적인 중첩 lambda 캡처에는 영향을 주지 않습니다.
사용 시 유의 사항
lambda표현식을 포함하지 않는 경우- 입력이
NULL이면NULL을 반환하고, 입력이 빈 배열[]이면 빈 배열을 반환합니다. ARRAY_SORT는 오름차순으로 정렬하고,ARRAY_REVERSE_SORT는 내림차순으로 정렬합니다.
- 입력이
lambda표현식을 포함하는 경우lambda표현식의 값은 -1, 0 또는 1이어야 합니다.NULL값이 있는 경우,NULL값을 배열의 앞에 배치할지 뒤에 배치할지 명시해야 합니다.
예제
- 기본:
NULL요소는 반환되는 배열의 맨 앞에 배치됩니다
SELECT ARRAY_SORT([2,1,3,null]);
+--------------------------+
| ARRAY_SORT([2,1,3,null]) |
+--------------------------+
| [null, 1, 2, 3] |
+--------------------------+
- 입력이
NULL이면NULL을 반환하고, 입력이 빈 배열[]이면 빈 배열을 반환합니다.
SELECT ARRAY_SORT(NULL);
+------------------+
| ARRAY_SORT(NULL) |
+------------------+
| NULL |
+------------------+
SELECT ARRAY_SORT([]);
+----------------+
| ARRAY_SORT([]) |
+----------------+
| [] |
+----------------+
lambda표현식 사용
SELECT array_sort((x, y) -> IF(x < y, 1, IF(x = y, 0, -1)), [3, 2, 5, 1, 2]);
+-----------------------------------------------------------------------+
| array_sort((x, y) -> IF(x < y, 1, IF(x = y, 0, -1)), [3, 2, 5, 1, 2]) |
+-----------------------------------------------------------------------+
| [5, 3, 2, 2, 1] |
+-----------------------------------------------------------------------+
SELECT array_sort((x, y) -> IF(x < y, 1, IF(x = y, 0, -1)), ['bc', 'ab', 'dc']);
+--------------------------------------------------------------------------+
| array_sort((x, y) -> IF(x < y, 1, IF(x = y, 0, -1)), ['bc', 'ab', 'dc']) |
+--------------------------------------------------------------------------+
| ["dc", "bc", "ab"] |
+--------------------------------------------------------------------------+
SELECT array_sort((x, y) -> CASE WHEN x IS NULL THEN -1
WHEN y IS NULL THEN 1
WHEN x < y THEN 1
WHEN x = y THEN 0
ELSE -1 END,
[3, 2, null, 5, null, 1, 2]);
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| array_sort((x, y) -> CASE WHEN x IS NULL THEN -1
WHEN y IS NULL THEN 1
WHEN x < y THEN 1
WHEN x = y THEN 0
ELSE -1 END,
[3, 2, null, 5, null, 1, 2]) |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| [null, null, 5, 3, 2, 2, 1] |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
SELECT array_sort((x, y) -> CASE WHEN x IS NULL THEN 1
WHEN y IS NULL THEN -1
WHEN x < y THEN 1
WHEN x = y THEN 0
ELSE -1 END,
[3, 2, null, 5, null, 1, 2]);
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| array_sort((x, y) -> CASE WHEN x IS NULL THEN 1
WHEN y IS NULL THEN -1
WHEN x < y THEN 1
WHEN x = y THEN 0
ELSE -1 END,
[3, 2, null, 5, null, 1, 2]) |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| [5, 3, 2, 2, 1, null, null] |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
SELECT array_sort((x, y) -> IF(length(x) < length(y), -1,
IF(length(x) = length(y), 0, 1)),
['a', 'abcd', 'abc']);
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| array_sort((x, y) -> IF(length(x) < length(y), -1,
IF(length(x) = length(y), 0, 1)),
['a', 'abcd', 'abc']) |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ["a", "abc", "abcd"] |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+
SELECT array_sort((x, y) -> IF(cardinality(x) < cardinality(y), -1,
IF(cardinality(x) = cardinality(y), 0, 1)),
[[2, 3, 1], [4, 2, 1, 4], [1, 2]]);
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| array_sort((x, y) -> IF(cardinality(x) < cardinality(y), -1,
IF(cardinality(x) = cardinality(y), 0, 1)),
[[2, 3, 1], [4, 2, 1, 4], [1, 2]]) |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| [[1, 2], [2, 3, 1], [4, 2, 1, 4]] |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- 다차원 배열 정렬
SELECT ARRAY_SORT([[6, 2], [5, 6]]);
+------------------------------+
| ARRAY_SORT([[6, 2], [5, 6]]) |
+------------------------------+
| [[5, 6], [6, 2]] |
+------------------------------+