メインコンテンツまでスキップ
に最終更新

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 値を配列の先頭と末尾のどちらに配置するかを明示する必要があります。

例​

  1. 基本例:NULL 要素は、返される配列の先頭に配置されます。
SELECT ARRAY_SORT([2,1,3,null]);
+--------------------------+
| ARRAY_SORT([2,1,3,null]) |
+--------------------------+
| [null, 1, 2, 3] |
+--------------------------+
  1. 入力が NULL の場合は NULL を返し、入力が空の配列 [] の場合は空の配列を返します。
SELECT ARRAY_SORT(NULL);
+------------------+
| ARRAY_SORT(NULL) |
+------------------+
| NULL |
+------------------+
SELECT ARRAY_SORT([]);
+----------------+
| ARRAY_SORT([]) |
+----------------+
| [] |
+----------------+
  1. 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]] |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  1. 多次元配列のソート
SELECT ARRAY_SORT([[6, 2], [5, 6]]);
+------------------------------+
| ARRAY_SORT([[6, 2], [5, 6]]) |
+------------------------------+
| [[5, 6], [6, 2]] |
+------------------------------+