Trie les éléments du tableau ARRAY a selon le paramètre comparator.
Syntaxe
array<T> array_sort(array<T> <a>, function<T, T, bigint> <comparator>)
Paramètres
a : obligatoire. Tableau de type ARRAY. Le type
Tdans la signaturearray<T>représente le type de données des éléments du tableau ; ceux-ci peuvent être de n'importe quel type.-
comparator : obligatoire. Fonction (native ou personnalisée) ou expression utilisée pour comparer deux éléments du tableau ARRAY.
La logique de
comparator(a, b)est la suivante : si a est égal à b, la fonction renvoie 0. Si a est inférieur à b, elle renvoie un entier négatif. Si a est supérieur à b, elle renvoie un entier positif. Sicomparator(a, b)renvoie NULL, une erreur se produit.ImportantLes fonctions de comparaison utilisées dans ARRAY_SORT doivent être cohérentes. Exemples :
Si
compare(a, b) > 0est vérifié, alorscompare(b, a) < 0doit également l'être.Si
compare(a, b) = 0est vérifié, alorscompare(b, a) = 0doit également l'être.Si
compare(a, b) < 0est vérifié, alorscompare(b, a) > 0doit également l'être.
Exemples de fonctions incohérentes :
-
(left, right) -> CASE WHEN left <= right THEN -1L ELSE 0L END:Si vous définissez
a = 1etb = 1, la fonctioncompare(a, b)renvoie -1, tout comme la fonctioncompare(b, a). Les résultats de comparaison sont contradictoires, ce qui rend ces fonctions incohérentes. -
(left, right) -> CASE WHEN left < right THEN - 1L WHEN left = right THEN 0L ELSE 1L END:Si vous définissez
a = NULLetb = 1, la fonctioncompare(a, b)renvoie 1, tout comme la fonctioncompare(b, a). Les résultats de comparaison sont contradictoires, ce qui rend ces fonctions incohérentes.
Valeur de retour
Renvoie une valeur de type ARRAY.
Exemples
-
Exemple 1 : trier le tableau
array(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 );Le résultat est le suivant :
+------------+ | _c0 | +------------+ | [1,5,6] | +------------+ -
Exemple 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);Le résultat est le suivant :
+------+ | _c0 | +------+ | [{a:1, b:10}, {a:2, b:12}, {a:3, b:11}] | +------+
Fonctions associées
La fonction ARRAY_SORT fait partie des fonctions de types complexes. Pour plus d'informations sur les fonctions de traitement des données de types complexes (telles que ARRAY, MAP, STRUCT et JSON), consultez la rubrique Complex type functions.
Les exemples de la fonction ARRAY_SORT utilisent l'opérateur
->. Pour plus d'informations sur les fonctions Lambda utilisant->, consultez la rubrique Lambda functions.