- Catégories :
Fonctions de données semi-structurées et structurées (tableau/objet)
ARRAY_SORT¶
Renvoie un ARRAY contenant les Ă©lĂ©ments du ARRAY dâentrĂ©e triĂ©s par ordre croissant ou dĂ©croissant. Vous pouvez spĂ©cifier si les Ă©lĂ©ments NULL sont triĂ©s avant ou aprĂšs les Ă©lĂ©ments non NULL.
Syntaxe¶
ARRAY_SORT( <array> [ , <sort_ascending> [ , <nulls_first> ] ] )
Arguments¶
Nécessaire
array
Le ARRAY des éléments à trier.
Facultatif
sort_ascending
Indique si les Ă©lĂ©ments doivent ĂȘtre triĂ©s par ordre croissant ou dĂ©croissant :
Indiquez TRUE pour trier les éléments par ordre croissant.
Indiquez FALSE pour trier les éléments par ordre décroissant.
Par défaut : TRUE
nulls_first
SpĂ©cifie si les Ă©lĂ©ments SQL NULL doivent ĂȘtre placĂ©s au dĂ©but ou Ă la fin du ARRAY triĂ© :
Spécifiez TRUE pour placer les éléments SQL NULL en premier dans le ARRAY.
Spécifiez FALSE pour placer les éléments SQL NULL en dernier dans le ARRAY.
Valeur par défaut : FALSE si le ARRAY est trié par ordre croissant ; TRUE si ARRAY est trié par ordre décroissant.
Cet argument nâaffecte que lâordre des Ă©lĂ©ments de SQL NULL. Cela nâaffecte pas lâordre des Ă©lĂ©ments JSON null.
Renvoie¶
Cette fonction renvoie un ARRAY qui contient les éléments de array
dans lâordre.
Notes sur lâutilisation¶
Lâordre de tri est Ă©quivalent Ă lâordre rĂ©sultant de lâaplatissement du ARRAY et de la spĂ©cification dâune clause ORDER BY avec les paramĂštres ASC | DESC and NULLS FIRST | LAST correspondants.
Si lâun des arguments dâentrĂ©e est NULL, la fonction renvoie NULL.
Il nâest pas garanti que cette fonction fournisse un tri stable lorsque le ARRAY contient lâun des Ă©lĂ©ments suivants :
ĂlĂ©ments de deux types numĂ©rique ou horodatage diffĂ©rents.
Objets contenant deux types numériques ou horodatage différents.
Exemples¶
Lâexemple suivant renvoie un ARRAY de nombres dont les Ă©lĂ©ments sont issus dâun ARRAY dâentrĂ©e constant triĂ© par ordre croissant. Les Ă©lĂ©ments comprennent un JSON NULL (PARSE_JSON(ânullâ)) et un SQL NULL.
Notez que dans le ARRAY trié, les JSON NULLs (null
) et les SQL NULLs (undefined
) sont les derniers éléments.
SELECT ARRAY_SORT([20, PARSE_JSON('null'), 0, NULL, 10]);
+---------------------------------------------------+
| ARRAY_SORT([20, PARSE_JSON('NULL'), 0, NULL, 10]) |
|---------------------------------------------------|
| [ |
| 0, |
| 10, |
| 20, |
| null, |
| undefined |
| ] |
+---------------------------------------------------+
Lâexemple suivant renvoie un ARRAY de nombres dont les Ă©lĂ©ments sont triĂ©s par ordre dĂ©croissant. Notez que dans le ARRAY triĂ©, les JSON NULLs (null
) et les SQL NULLs (undefined
) sont les premiers éléments.
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 |
| ] |
+----------------------------------------------------------+
Lâexemple suivant trie les Ă©lĂ©ments par ordre croissant. Lâexemple dĂ©finit lâargument nulls_first
sur TRUE pour placer les SQL NULLs (undefined
) en premier dans le ARRAY triĂ©. (Par dĂ©faut, les SQL NULLs sont placĂ©s Ă la fin dâun ARRAY triĂ© par ordre croissant)
Notez que nulls_first
nâa aucun effet sur lâemplacement des JSON NULLs (null
).
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 |
| ] |
+---------------------------------------------------------------+
Lâexemple suivant trie les Ă©lĂ©ments par ordre dĂ©croissant. Lâexemple dĂ©finit lâargument nulls_first
sur FALSE pour placer les SQL NULLs (undefined
) en dernier dans le ARRAY triĂ©. (Par dĂ©faut, les SQL NULLs sont placĂ©s au dĂ©but dâun ARRAY triĂ© par ordre dĂ©croissant)
Notez que nulls_first
nâa aucun effet sur lâemplacement des JSON NULLs (null
).
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 |
| ] |
+-----------------------------------------------------------------+
Lâexemple suivant utilise la fonction ARRAY_INSERT pour construire un ARRAY peu rempli. (Lâexemple insĂšre les valeurs 1
et 2
Ă des positions spĂ©cifiques dans le ARRAY.) Lâexemple utilise ensuite la fonction ARRAY_SORT pour trier ce ARRAY.
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 |
| ] | ] |
+--------------+-----------------+
Lâexemple suivant montre que le tri dâun ARRAY avec diffĂ©rents types numĂ©riques entraĂźne un tri instable. Lâexemple utilise un ARRAY qui contient des valeurs NUMBER et une valeur REAL.
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 |
| ] |
+----------------------------------+