に最終更新
ARRAY_SORT
説明
ラムダ関数を指定しない場合、配列の要素は昇順にソートされます。それ以外の場合は、ラムダ関数に従ってソートされます。
構文
ARRAY_SORT(<arr>)
ARRAY_SORT(<lambda>, <arr>)
パラメータ
| パラメータ | 説明 |
|---|---|
<arr> | 要素が数値、真偽値、文字列、日時、IP、UUID、またはその他のサポート対象の型である ARRAY。多次元配列もサポートされますが、ネストされたすべての要素は、これらのサポート対象の型である必要があります。 |
<lambda> | 省略可能な比較関数。両方の要素を受け取り、最初の要素が次の要素より小さい場合、等しい場合、大きい場合に、それぞれ -1、0、1 を返します。 |
戻り値
lambda式を含まない場合- 入力と同じ型の
ARRAY<T>を返します。 NULL要素は、返される配列の先頭に配置されます。
- 入力と同じ型の
lambda式を含む場合は、その式に従ってソートし、入力と同じ型のARRAY<T>を返します。
Doris 4.1 系列の 4.1.5 以降では、外側のラムダ引数や別のカラムを参照する比較関数は、明示的にエラーを報告します。比較関数が使用できるのは自身が受け取る両方の引数だけであり、その内部にネストされたラムダは、それらの比較関数の引数をキャプチャできません。この制限は、ARRAY_MAP における通常のネストされたラムダのキャプチャには影響しません。
使用上の注意
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]] |
+------------------------------+