ARRAY_SORT
ARRAY_SORT
ARRAY_SORT() 함수는 입력 ARRAY의 요소를 오름차순 또는 내림차순으로 정렬한 ARRAY를 반환해요. NULL 요소를 NULL이 아닌 요소 앞 또는 뒤로 정렬할지 지정할 수 있어요.
본문
문법
ARRAY_SORT( <array> [ , <sort_ascending> [ , <nulls_first> ] ] )
인자
array (필수) — 정렬할 요소의 ARRAY예요.
sort_ascending (선택) — 요소를 오름차순 또는 내림차순으로 정렬할지 지정해요.
- TRUE를 지정하면 오름차순으로 정렬해요.
- FALSE를 지정하면 내림차순으로 정렬해요.
- 기본값: TRUE.
nulls_first (선택) — SQL NULL 요소를 정렬된 ARRAY의 시작 또는 끝에 배치할지 지정해요.
- TRUE를 지정하면 SQL NULL 요소를 ARRAY의 첫 부분에 배치해요.
- FALSE를 지정하면 SQL NULL 요소를 ARRAY의 끝에 배치해요.
- 기본값: ARRAY가 오름차순으로 정렬되면 FALSE, 내림차순으로 정렬되면 TRUE.
이 인자는 SQL NULL 요소의 순서에만 영향을 줘요. JSON null 요소의 순서에는 영향을 주지 않아요.
반환
이 함수는 array의 요소를 정렬된 순서로 담은 ARRAY를 반환해요.
사용 노트
- 정렬 순서는 ARRAY를 평탄화하고 해당 ASC | DESC 및 NULLS FIRST | LAST 매개변수로 ORDER BY 절을 지정한 결과 순서와 동일해요.
- 입력 인자 중 어떤 것이 NULL이면 함수는 NULL을 반환해요.
- ARRAY가 다음 중 하나를 포함하면 이 함수는 안정적인(stable) 정렬을 보장하지 않아요.
- 서로 다른 두 숫자 또는 타임스탬프 타입의 요소.
- 서로 다른 두 숫자 또는 타임스탬프 타입을 포함하는 객체.
예제
다음 예제는 입력 ARRAY 상수의 요소를 오름차순으로 정렬한 숫자 ARRAY를 반환해요. 요소에는 JSON NULL(PARSE_JSON('null'))과 SQL NULL이 포함돼요.
정렬된 ARRAY에서 JSON NULL(null)과 SQL NULL(undefined)이 마지막 요소임에 주의하세요.
SELECT ARRAY_SORT([20, PARSE_JSON('null'), 0, NULL, 10]);
+---------------------------------------------------+
| ARRAY_SORT([20, PARSE_JSON('NULL'), 0, NULL, 10]) |
|---------------------------------------------------|
| [ |
| 0, |
| 10, |
| 20, |
| null, |
| undefined |
| ] |
+---------------------------------------------------+
다음 예제는 요소를 내림차순으로 정렬한 숫자 ARRAY를 반환해요. 정렬된 ARRAY에서 JSON NULL(null)과 SQL NULL(undefined)이 첫 요소들임에 주의하세요.
SELECT ARRAY_SORT([20, PARSE_JSON('null'), 0, NULL, 10], FALSE);
+----------------------------------------------------------+
| ARRAY_SORT([20, PARSE_JSON('NULL'), 0, NULL, 10], FALSE) |
|----------------------------------------------------------|
| [ |
| undefined, |
| null, |
| 20, |
| 10, |
| 0 |
| ] |
+----------------------------------------------------------+
다음 예제는 요소를 오름차순으로 정렬해요. 예제는 nulls_first 인자를 TRUE로 설정해 SQL NULL(undefined)을 정렬된 ARRAY의 첫 부분에 배치해요. (기본적으로 SQL NULL은 오름차순 정렬된 ARRAY의 끝에 배치돼요.)
nulls_first가 JSON NULL(null)의 배치에는 영향을 주지 않음에 주의하세요.
SELECT ARRAY_SORT([20, PARSE_JSON('null'), 0, NULL, 10], TRUE, TRUE);
+---------------------------------------------------------------+
| ARRAY_SORT([20, PARSE_JSON('NULL'), 0, NULL, 10], TRUE, TRUE) |
|---------------------------------------------------------------|
| [ |
| undefined, |
| 0, |
| 10, |
| 20, |
| null |
| ] |
+---------------------------------------------------------------+
다음 예제는 요소를 내림차순으로 정렬해요. 예제는 nulls_first 인자를 FALSE로 설정해 SQL NULL(undefined)을 정렬된 ARRAY의 끝에 배치해요. (기본적으로 SQL NULL은 내림차순 정렬된 ARRAY의 시작에 배치돼요.)
nulls_first가 JSON NULL(null)의 배치에는 영향을 주지 않음에 주의하세요.
SELECT ARRAY_SORT([20, PARSE_JSON('null'), 0, NULL, 10], FALSE, FALSE);
+-----------------------------------------------------------------+
| ARRAY_SORT([20, PARSE_JSON('NULL'), 0, NULL, 10], FALSE, FALSE) |
|-----------------------------------------------------------------|
| [ |
| null, |
| 20, |
| 10, |
| 0, |
| undefined |
| ] |
+-----------------------------------------------------------------+
다음 예제는 ARRAY_INSERT 함수를 사용해 성기게 채워진 ARRAY를 만들어요. (예제는 값 1과 2를 ARRAY의 특정 위치에 삽입해요.) 그런 다음 ARRAY_SORT 함수로 이 ARRAY를 정렬해요.
SELECT ARRAY_INSERT(ARRAY_INSERT(ARRAY_CONSTRUCT(), 3, 2), 6, 1) arr, ARRAY_SORT(arr);
+--------------+-----------------+
| ARR | ARRAY_SORT(ARR) |
|--------------+-----------------|
| [ | [ |
| undefined, | 1, |
| undefined, | 2, |
| undefined, | undefined, |
| 2, | undefined, |
| undefined, | undefined, |
| undefined, | undefined, |
| 1 | undefined |
| ] | ] |
+--------------+-----------------+
다음 예제는 서로 다른 숫자 타입을 가진 ARRAY를 정렬하면 불안정한 정렬이 발생함을 보여줘요. 예제는 NUMBER 값과 REAL 값을 담은 ARRAY를 사용해요.
SELECT ARRAY_SORT([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1e0::REAL]) AS array_of_different_numeric_types;
+----------------------------------+
| ARRAY_OF_DIFFERENT_NUMERIC_TYPES |
|----------------------------------|
| [ |
| 1, |
| 1.000000000000000e+00, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1 |
| ] |
+----------------------------------+