Bir karşılaştırıcı kullanarak a dizisindeki öğeleri sıralar.
Söz dizimi
array<T> array_sort(array<T> <a>, function<T, T, bigint> <comparator>)
Parametreler
a: Zorunludur. Bu parametre bir dizi belirtir.
Tiçindekiarray<T>ifadesi, dizideki öğelerin veri türünü belirtir. Öğeler herhangi bir veri türünde olabilir.-
comparator: Zorunludur. Bu parametre, dizideki iki öğeyi karşılaştırmak için kullanılan yerleşik bir işlevi, kullanıcı tanımlı işlevi (UDF) veya ifadeyi belirtir.
comparator(a, b)işleme mantığı: a, b'ye eşitse 0 döndürülür. a, b'den küçükse negatif bir tamsayı döndürülür. a, b'den büyükse pozitif bir tamsayı döndürülür.comparator(a, b)null değeri döndürürse hata oluşur.ÖnemliARRAY_SORT içindeki karşılaştırma işlevleri tutarlı olmalıdır. Örnekler:
compare(a, b) > 0koşulu sağlanıyorsacompare(b, a) < 0koşulu da sağlanmalıdır.compare(a, b) = 0koşulu sağlanıyorsacompare(b, a) = 0koşulu da sağlanmalıdır.compare(a, b) < 0koşulu sağlanıyorsacompare(b, a) > 0koşulu da sağlanmalıdır.
Tutarlı olmayan işlev örnekleri:
-
(left, right) -> CASE WHEN left <= right THEN -1L ELSE 0L END:a = 1veb = 1olarak ayarlarsanızcompare(a, b)işlevi -1,compare(b, a)işlevi de -1 döndürür. Karşılaştırma sonuçları çelişir ve işlevler tutarlı değildir. -
(left, right) -> CASE WHEN left < right THEN - 1L WHEN left = right THEN 0L ELSE 1L END:a = NULLveb = 1olarak ayarlarsanızcompare(a, b)işlevi 1,compare(b, a)işlevi de 1 döndürür. Karşılaştırma sonuçları çelişir ve işlevler tutarlı değildir.
Dönüş değeri
ARRAY türünde bir değer döndürülür.
Örnekler
-
Örnek 1:
array(5,6,1)içindeki öğeleri sıralayın.SELECT array_sort(array(5,6,1),(left,right)-> CASE WHEN left<right THEN-1L WHEN left>right THEN 1L ELSE 0L END );Aşağıdaki sonuç döndürülür:
+------------+ | _c0 | +------------+ | [1,5,6] | +------------+ -
Örnek 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);Aşağıdaki sonuç döndürülür:
+------+ | _c0 | +------+ | [{a:1, b:10}, {a:2, b:12}, {a:3, b:11}] | +------+
İlgili işlevler
ARRAY_SORT karmaşık türde bir işlevdir. ARRAY, MAP, STRUCT ve JSON gibi karmaşık veri türlerini işlemek için kullanılan işlevler hakkında daha fazla bilgi için bkz. Karmaşık tür işlevleri.
Yukarıdaki örneklerde kısa çizgi ve sağ açı parantezi kombinasyonu
(->)kullanılmıştır. Lambda işlevlerinde kısa çizgi ve sağ açı parantezi kombinasyonunun(->)nasıl kullanılacağı hakkında daha fazla bilgi için bkz. Lambda işlevleri.