Kategorien:

Funktionen für semistrukturierte und strukturierte Daten (Array/Objekt)

ARRAY_SORT

Gibt ein ARRAY zurück, in dem die Elemente des Eingabe-ARRAY aufsteigend oder absteigend sortiert sind. Sie können festlegen, ob NULL-Elemente vor oder nach Nicht-NULL-Elementen einsortiert werden sollen.

Syntax

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

Argumente

Erforderlich

array

Das ARRAY mit den zu sortierenden Elementen.

Optional

sort_ascending

Gibt an, ob die Elemente in aufsteigender oder absteigender Reihenfolge sortiert werden sollen:

  • Bei TRUE werden die Elemente in aufsteigender Reihenfolge sortiert.

  • Bei FALSE werden die Elemente in absteigender Reihenfolge sortiert.

Standard: TRUE

nulls_first

Gibt an, ob SQL NULL-Elemente am Anfang oder am Ende des sortierten ARRAY platziert werden sollen:

  • Bei TRUE werden die SQL NULL-Elemente am Anfang des ARRAY einsortiert.

  • Bei FALSE werden die SQL NULL-Elemente am Ende des ARRAY einsortiert.

Standard: FALSE, wenn ARRAY in aufsteigender Reihenfolge sortiert ist, und TRUE, wenn ARRAY in absteigender Reihenfolge sortiert ist.

Dieses Argument beeinflusst nur die Sortierung der SQL NULL-Elemente. Dies hat keinen Einfluss auf die Reihenfolge der JSON null-Elemente.

Rückgabewerte

Diese Funktion gibt ein ARRAY zurück, das die Elemente von array in sortierter Reihenfolge enthält.

Nutzungshinweise

  • Die Sortierreihenfolge entspricht der Reihenfolge, die sich ergibt, wenn das ARRAY vereinfacht wird (Flattening) und wenn eine ORDER BY-Klausel mit den entsprechenden ASC | DESC and NULLS FIRST | LAST-Parametern angegeben wird.

  • Wenn eines der Eingabeargumente NULL ist, gibt die Funktion NULL zurück.

  • Es ist nicht garantiert, dass diese Funktion eine stabile Sortierung liefert, wenn ARRAY eine der folgenden Bedingungen erfüllt:

    • Enthält Elemente mit zwei verschiedenen numerischen oder Zeitstempel-Typen.

    • Enthält Objekte, die zwei verschiedene numerische oder Zeitstempeltypen enthalten.

Beispiele

Im folgenden Beispiel wird ein ARRAY von Zahlen zurückgegeben, wobei die Elemente des Eingabe-ARRAY konstant in aufsteigender Reihenfolge sortiert sind. Die Elemente enthalten JSON NULL-Werte (PARSE_JSON(‚null‘)) und SQL NULL-Werte.

Beachten Sie, dass in einem sortierten ARRAY die JSON NULL-Werte (null) und SQL NULL-Werte (undefined) die letzten Elemente sind.

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                                       |
| ]                                                 |
+---------------------------------------------------+

Im folgenden Beispiel wird ein ARRAY von Zahlen zurückgegeben, wobei die Elemente in absteigender Reihenfolge sortiert sind. Beachten Sie, dass in dem sortierten ARRAY die JSON NULL-Werte (null) und SQL NULL-Werte (undefined) die ersten Elemente sind.

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                                                      |
| ]                                                        |
+----------------------------------------------------------+

Im folgenden Beispiel werden die Elemente in aufsteigender Reihenfolge sortiert. Im Beispiel wird das Argument nulls_first auf TRUE gesetzt, um SQL NULL-Werte (undefined) an den Anfang des sortierten ARRAY zu setzen. (Standardmäßig werden in einem aufsteigend sortierten ARRAY die SQL NULL-Werte an das Ende gesetzt.)

Beachten Sie, dass nulls_first keinen Einfluss auf das Platzieren von JSON NULL-Werten (null) hat.

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                                                        |
| ]                                                             |
+---------------------------------------------------------------+

Im folgenden Beispiel werden die Elemente in absteigender Reihenfolge sortiert. Im Beispiel wird das Argument nulls_first auf FALSE gesetzt, um die SQL NULL-Werte (undefined) an das Ende des sortierten ARRAY zu setzen. (Standardmäßig werden in einem absteigend sortierten ARRAY die SQL NULL-Werte an den Anfang gesetzt.)

Beachten Sie, dass nulls_first keinen Einfluss auf das Platzieren von JSON NULL-Werten (null) hat.

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                                                     |
| ]                                                               |
+-----------------------------------------------------------------+

Im folgenden Beispiel wird die Funktion ARRAY_INSERT verwendet, um ein spärlich gefülltes ARRAY zu konstruieren. (Im Beispiel werden die Werte 1 und 2 an bestimmten Positionen im ARRAY eingefügt.) Im Beispiel wird dann die Funktion ARRAY_SORT verwendet, um dieses ARRAY zu sortieren.

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     |
| ]            | ]               |
+--------------+-----------------+

Im folgenden Beispiel wird gezeigt, dass die Sortierung eines ARRAY mit unterschiedlichen numerischen Typen zu einer instabilen Sortierung führt. Im Beispiel wird ein ARRAY verwendet, das NUMBER-Werte und einen REAL-Wert enthält.

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                              |
| ]                                |
+----------------------------------+