- 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> ] ] )
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]);
+---------------------------------------------------+
| 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);
+----------------------------------------------------------+
| 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);
+---------------------------------------------------------------+
| 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);
+-----------------------------------------------------------------+
| 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);
+--------------+-----------------+
| 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;
+----------------------------------+
| ARRAY_OF_DIFFERENT_NUMERIC_TYPES |
|----------------------------------|
| [ |
| 1, |
| 1.000000000000000e+00, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1, |
| 1 |
| ] |
+----------------------------------+