ARRAY_SORT
ファンクション
lambda関数が指定されていない場合、配列要素は昇順でソートされます。それ以外の場合は、lambda関数に従ってソートが実行されます。
Syntax
ARRAY_SORT(arr)ARRAY_SORT(lambda, arr)
パラメータ
lambda: ソートルールを定義するために使用されるlambda式で、戻り値は-1、0、または1である必要があります(それぞれ未満、以下または等しい、および超過を表します)。arr:ARRAY<T>。ここでTは数値、boolean、文字列、datetime、IPなどにすることができます。
Return value
lambda式を含まない場合- 入力と同じ型の
ARRAY<T>を返します。 NULL要素は返される配列の先頭に配置されます。
- 入力と同じ型の
lambda式を含む場合、lambda式に従ってソートし、入力と同じ型のARRAY<T>を返します。
Usage notes
lambda式を含まない場合- 入力が
NULLの場合はNULLを返します。入力が空の配列[]の場合は空の配列を返します。 ARRAY_SORTは昇順でソートし、ARRAY_REVERSE_SORTは降順でソートします。
- 入力が
lambda式を含む場合lambda式の値は-1、0、または1である必要があります。NULL値が存在する場合は、NULL値を配列の前に配置するか後に配置するかを明示的に記述する必要があります。
Examples
- Basic:
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]] |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+