カテゴリ:

半構造化データ関数と構造化データ関数 (配列/オブジェクト)

ARRAY_SORT

入力 ARRAY の要素を含む ARRAY を昇順または降順に並べ替えて返します。NULL 要素を NULL 以外の要素の前後で並べ替えるかどうかを指定できます。

構文

ARRAY_SORT( <array> [ , <sort_ascending> [ , <nulls_first> ] ] )
Copy

引数

必須

array

並べ替える要素の ARRAY。

オプション

sort_ascending

要素を昇順で並べるか降順で並べるかを指定します。

  • TRUE を指定すると、要素を昇順に並べ替えます。

  • FALSE を指定すると、要素を降順に並べ替えます。

デフォルト: TRUE

nulls_first

SQL NULL 要素を、並べ替えられた ARRAY の先頭に置くか、最後に置くかを指定します。

  • SQL NULL の要素を ARRAY の先頭に配置するには TRUE を指定します。

  • SQL NULL の要素を ARRAY の最後に配置するには FALSE を指定します。

デフォルト: ARRAY が昇順で並べ替えられている場合は FALSE、 ARRAY が降順で並べ替えられている場合は TRUE。

この引数は SQL NULL の要素の順番にのみ影響します。これは、 JSON nul 要素の順序に影響しません。

戻り値

この関数は、 array の要素を並べ替え順に含む ARRAY を返します。

使用上の注意

  • 並べ替え順は、 ARRAY を フラット化 し、対応する ASC | DESC and NULLS FIRST | LAST パラメーターを持つ ORDER BY 句を指定した結果として得られる順序と同じです。

  • いずれかの入力引数が NULL の場合、関数は NULL を返します。

  • この関数は、 ARRAY に以下のいずれかが含まれる場合、安定した並べ替えの提供を保証しません。

    • 数値 型または タイムスタンプ 型の異なる2つの型の要素。

    • 2つの異なる数値型またはタイムスタンプ型を含むオブジェクト。

次の例は、入力 ARRAY 定数 からの要素を昇順に並べ替えて数値の ARRAY を返します。要素には JSON NULL (PARSE_JSON('null')) と SQL NULL があります。

並べ替えられた ARRAY では、 JSON NULLs (null)と SQL NULLs (undefined)が最後の要素であることに注意してください。

SELECT ARRAY_SORT([20, PARSE_JSON('null'), 0, NULL, 10]);
Copy
+---------------------------------------------------+
| ARRAY_SORT([20, PARSE_JSON('NULL'), 0, NULL, 10]) |
|---------------------------------------------------|
| [                                                 |
|   0,                                              |
|   10,                                             |
|   20,                                             |
|   null,                                           |
|   undefined                                       |
| ]                                                 |
+---------------------------------------------------+

次の例は、要素を降順に並べ替えて数値の ARRAY を返します。並べ替えられた ARRAY では、 JSON NULLs (null)と SQL NULLs (undefined)が最初の要素であることに注意してください。

SELECT ARRAY_SORT([20, PARSE_JSON('null'), 0, NULL, 10], FALSE);
Copy
+----------------------------------------------------------+
| ARRAY_SORT([20, PARSE_JSON('NULL'), 0, NULL, 10], FALSE) |
|----------------------------------------------------------|
| [                                                        |
|   undefined,                                             |
|   null,                                                  |
|   20,                                                    |
|   10,                                                    |
|   0                                                      |
| ]                                                        |
+----------------------------------------------------------+

次の例では、要素を昇順に並べ替えています。この例では、 SQL NULLs (undefined)を並べ替えられた ARRAY の最初に配置するために、 nulls_first 引数を TRUE に設定しています。(デフォルトでは、 SQL NULLs は昇順で並べ替えられた ARRAY の最後に配置されます。)

nulls_first は JSON NULLs (null)の配置には影響しないことに注意してください。

SELECT ARRAY_SORT([20, PARSE_JSON('null'), 0, NULL, 10], TRUE, TRUE);
Copy
+---------------------------------------------------------------+
| ARRAY_SORT([20, PARSE_JSON('NULL'), 0, NULL, 10], TRUE, TRUE) |
|---------------------------------------------------------------|
| [                                                             |
|   undefined,                                                  |
|   0,                                                          |
|   10,                                                         |
|   20,                                                         |
|   null                                                        |
| ]                                                             |
+---------------------------------------------------------------+

次の例では、要素を降順に並べ替えています。この例では、 SQL NULLs (undefined)を並べ替えられた ARRAY の最後に配置するために、 nulls_first 引数を FALSE に設定しています。(デフォルトでは、 SQL NULLs は降順で並べ替えられた ARRAY の最初に配置されます。)

nulls_first は JSON NULLs (null)の配置には影響しないことに注意してください。

SELECT ARRAY_SORT([20, PARSE_JSON('null'), 0, NULL, 10], FALSE, FALSE);
Copy
+-----------------------------------------------------------------+
| ARRAY_SORT([20, PARSE_JSON('NULL'), 0, NULL, 10], FALSE, FALSE) |
|-----------------------------------------------------------------|
| [                                                               |
|   null,                                                         |
|   20,                                                           |
|   10,                                                           |
|   0,                                                            |
|   undefined                                                     |
| ]                                                               |
+-----------------------------------------------------------------+

以下の例では、 ARRAY_INSERT 関数を使用して、スパースに入力された ARRAY を構築しています。(この例では、 ARRAY の特定の位置に 12 という値を挿入しています。)この例では、 ARRAY_SORT 関数を使用して、この ARRAY を並べ替えています。

SELECT ARRAY_INSERT(ARRAY_INSERT(ARRAY_CONSTRUCT(), 3, 2), 6, 1) arr, ARRAY_SORT(arr);
Copy
+--------------+-----------------+
| ARR          | ARRAY_SORT(ARR) |
|--------------+-----------------|
| [            | [               |
|   undefined, |   1,            |
|   undefined, |   2,            |
|   undefined, |   undefined,    |
|   2,         |   undefined,    |
|   undefined, |   undefined,    |
|   undefined, |   undefined,    |
|   1          |   undefined     |
| ]            | ]               |
+--------------+-----------------+

次の例は、 ARRAY で異なる数値型を使用して並べ替えると、並べ替えが不安定になることを示しています。この例では、 NUMBER 値と REAL 値を含む ARRAY を使用しています。

SELECT ARRAY_SORT([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1e0::REAL]) AS array_of_different_numeric_types;
Copy
+----------------------------------+
| ARRAY_OF_DIFFERENT_NUMERIC_TYPES |
|----------------------------------|
| [                                |
|   1,                             |
|   1.000000000000000e+00,         |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1,                             |
|   1                              |
| ]                                |
+----------------------------------+