ARRAY_SORT

ARRAY_SORT

ARRAY_SORT() 함수는 입력 ARRAY의 요소를 오름차순 또는 내림차순으로 정렬한 ARRAY를 반환해요. NULL 요소를 NULL이 아닌 요소 앞 또는 뒤로 정렬할지 지정할 수 있어요.

출처: Snowflake SQL Reference

본문

문법

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                              |
| ]                                |
+----------------------------------+

더 알아보기 (Learn more)