- 类别:
:doc:`/sql-reference/functions-semistructured`(数组/对象)
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;如果 ARRAY 按降序排序,则为 TRUE。
此实参仅影响 SQL NULL 元素的顺序。这不会影响 JSON null 元素的顺序。
返回¶
此函数返回一个 ARRAY,其中包含按排序顺序排列的 array
元素。
使用说明¶
示例¶
以下示例返回一个数字 ARRAY,其中输入 ARRAY 常数 中的元素按升序排序。这些元素包括一个 JSON NULL (PARSE_JSON('null')) 和一个 SQL NULL。
请注意,在排序 ARRAY 中,JSON NULLs (null
) 和 SQL NULLs (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 NULLs (null
) 和 SQL NULLs (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 NULLs (undefined
) 放在排序 ARRAY 的第一位。(默认情况下,SQL NULLs 放在按升序排序的 ARRAY 的末尾。)
请注意,nulls_first
对 JSON NULLs (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 NULLs (undefined
) 放在排序 ARRAY 的最后。(默认情况下,SQL NULLs 放在按降序排序的 ARRAY 的开头。)
请注意,nulls_first
对 JSON NULLs (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。(该示例在 ARRAY 中的特定位置插入值 1
和 2
。)该示例随后使用 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 |
| ] |
+----------------------------------+