メインコンテンツまでスキップ
バージョン: Latest-4.0

array_sort

配列の要素を昇順にソートします。

構文

array_sort(array)
array_sort(array, (x,y)->expr(x,y))

パラメータ

array: ソートしたい配列。ARRAY データ型のみがサポートされます。

expr(x,y): ラムダ比較関数。引数 x と y のみに依存し、boolean 型または numeric 型を返す必要があります。結果が NULL になることは許可されていません。

戻り値

配列を返します。

使用上の注意

基本的なソート

  • この関数は配列の要素を昇順にのみソートします。

  • NULL 値は返される配列の先頭に配置されます。

  • 配列の要素を降順にソートしたい場合は、reverse 関数を使用してください。

  • 返される配列の要素は、入力配列の要素と同じデータ型を持ちます。

ラムダ比較関数を使用したソート

  • ラムダ比較関数 expr(x,y) は以下の要件を満たす必要があります:

    • 引数 x と y のみに依存する
    • boolean 型または numeric 型を返す
    • 結果が NULL になることはない
    • 厳密弱順序 (strict weak ordering) を満たす
  • 厳密弱順序の要件:

    • 反射性: expr(x, y)false を返す場合、expr(y, x)true を返す
    • 反対称性: expr(x, y)expr(y, x) が両方とも false の場合、x と y は等しいと見なされる
    • 推移性: expr(x, y)trueexpr(y, z)true の場合、expr(x, z)true である
    • 連結性: 任意の要素 x と y について、expr(x, y) または expr(y, x) のいずれかが true である

次のテーブルを例として使用します:

mysql> select * from test;

+------+--------------+

| c1 | c2 |

+------+--------------+

| 1 | [4,3,null,1] |

| 2 | NULL |

| 3 | [null] |

| 4 | [8,5,1,4] |

+------+--------------+

c2 の値を昇順にソートします。

mysql> select c1, array_sort(c2) from test;

+------+------------------+

| c1 | array_sort(`c2`) |

+------+------------------+

| 1 | [null,1,3,4] |

| 2 | NULL |

| 3 | [null] |

| 4 | [1,4,5,8] |

+------+------------------+

ラムダ比較関数の例

配列要素の絶対値でソートします:

mysql> select array_sort([3, -1, -5, 2], (x,y)->abs(x) < abs(y));
+-----------------------------------------------------------------+
| array_sort([3, -1, -5, 2], (x, y) -> abs(x) < abs(y)) |
+-----------------------------------------------------------------+
| [-1, 2, 3, -5] |
+-----------------------------------------------------------------+

配列要素の文字列長でソートします:

mysql> select array_sort(['apple', 'banana', 'cherry'], (x,y)->length(x) < length(y));
+--------------------------------------------------------------------------------------------+
| array_sort(['apple', 'banana', 'cherry'], (x, y) -> length(x) < length(y)) |
+--------------------------------------------------------------------------------------------+
| ['apple', 'banana', 'cherry'] |
+--------------------------------------------------------------------------------------------+

配列要素の二乗の和でソートします:

mysql> select array_sort([1, 2, 3, 4], (x,y)->(x*x + y*y) < 20);
+--------------------------------------------------------------------+
| array_sort([1, 2, 3, 4], (x, y) -> (x * x + y * y) < 20) |
+--------------------------------------------------------------------+
| [1, 2, 3, 4] |
+--------------------------------------------------------------------+

複雑な比較関数を使用したソート:

mysql> select array_sort(['hello', 'world', 'foo', 'bar'], (x,y)->case when length(x) = length(y) then x < y else length(x) < length(y) end);
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| array_sort(['hello', 'world', 'foo', 'bar'], (x, y) -> case when length(x) = length(y) then x < y else length(x) < length(y) end) |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ['foo', 'bar', 'hello', 'world'] |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

降順ソートの例:

mysql> select reverse(array_sort([4,3,1,2]));
+-----------------------------------+
| reverse(array_sort([4,3,1,2])) |
+-----------------------------------+
| [4,3,2,1] |
+-----------------------------------+

NULL値のソート例:

mysql> select array_sort([null, 3, 1, null, 2]);
+-------------------------------------+
| array_sort([null, 3, 1, null, 2]) |
+-------------------------------------+
| [null, null, 1, 2, 3] |
+-------------------------------------+
Rocky the happy otterStarRocks Assistant

AI generated answers are based on docs and other sources. Please test answers in non-production environments.