すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:ARRAY_SORT

最終更新日:Dec 16, 2024

コンパレータに基づいて配列aの要素を並べ替えます。

構文

array<T> array_sort(array<T> <a>, function<T, T, bigint> <comparator>)

パラメーター

  • a: 必須です。 このパラメーターは、配列を指定します。 array<T>Tは、配列内の要素のデータ型を指定します。 要素は任意のデータ型にすることができます。

  • comparator: 必須。 このパラメーターには、配列内の2つの要素を比較するために使用される組み込み関数、ユーザー定義関数 (UDF) 、または式を指定します。

    comparator(a, b) の処理ロジック: aがbに等しい場合、0が返されます。 aがbより小さい場合、負の整数が返されます。 aがbより大きい場合、正の整数が返されます。 comparator(a, b) がnullを返すと、エラーが返されます。

    重要

    ARRAY_SORTの比較関数は自己整合的でなければなりません。 例:

    • compare(a, b) > 0が満たされる場合、compare(b, a) < 0が満たされなければならない。

    • compare(a, b) = 0が満たされる場合、compare(b, a) = 0が満たされなければならない。

    • compare(a, b) < 0が満たされる場合、compare(b, a) > 0が満たされなければならない。

    自己整合性ではない関数の例:

    • (左、右) -> ケース左 <=右THEN -1L ELSE 0L END:

      a = 1b = 1を設定した場合、compare(a, b) 関数は-1を返し、compare(b, a) 関数も-1を返します。 比較結果は互いに矛盾し、関数は自己矛盾していません。

    • (左、右) -> ケース左 <右THEN - 1L左=右THEN 0L ELSE 1L END:

      a = NULLおよびb = 1を設定した場合、compare(a, b) 関数は1を返し、compare(b, a) 関数も1を返します。 比較結果は互いに矛盾し、関数は自己矛盾していません。

戻り値

ARRAY型の値が返されます。

  • 例1: 配列 (5,6,1) の要素をソートします。

    SELECT array_sort(array(5,6,1),(left,right)->
                      CASE 
                       WHEN left<right THEN-1L 
                       WHEN left>right THEN 1L 
                       ELSE 0L 
                      END
                     );

    次の応答が返されます。

    +------------+
    | _c0        |
    +------------+
    | [1,5,6]    |
    +------------+
  • 例 2:

    SELECT array_sort(a, (a,b)-> 
                      CASE 
                       WHEN a.a>b.a THEN 1L 
                       WHEN a.a<b.a THEN -1L 
                       ELSE 0L 
                      END)
     FROM VALUES (
      ARRAY(named_struct('a', 1, 'b', 10),
            named_struct('a', 3, 'b', 11),
            named_struct('a', 2, 'b', 12)))
      AS t(a);

    次の応答が返されます。

    +------+
    | _c0 |
    +------+
    | [{a:1, b:10}, {a:2, b:12}, {a:3, b:11}] |
    +------+

関連関数

  • ARRAY_SORTは複合型関数です。 ARRAY、MAP、STRUCT、JSONなどの複雑なデータ型のデータを処理するために使用される関数の詳細については、複合型関数.

  • 前述の例では、ハイフンとクロージングアングルブラケット (->) の組み合わせが使用されています。 Lambda関数でハイフンとクロージングアングルブラケット (->) の組み合わせを使用する方法の詳細については、「Lambda関数」をご参照ください。