Mengurutkan elemen-elemen dalam Array a berdasarkan komparator.
Sintaksis
array<T> array_sort(array<T> <a>, function<T, T, bigint> <comparator>)Parameter
a: Wajib. Menentukan array.
Tdalamarray<T>menunjukkan tipe data elemen-elemen dalam array, yang dapat berupa tipe data apa pun.komparator: Wajib. Menentukan fungsi bawaan, fungsi yang ditentukan pengguna (UDF), atau ekspresi untuk membandingkan dua elemen dalam array.
Logika pemrosesan
komparator(a, b): Jika a sama dengan b, nilai 0 dikembalikan. Jika a kurang dari b, bilangan bulat negatif dikembalikan. Jika a lebih besar dari b, bilangan bulat positif dikembalikan. Jikakomparator(a, b)mengembalikan null, kesalahan akan diberikan.PentingFungsi perbandingan dalam ARRAY_SORT harus konsisten secara mandiri. Contoh:
Jika
compare(a, b) > 0, makacompare(b, a) < 0juga harus terpenuhi.Jika
compare(a, b) = 0, makacompare(b, a) = 0juga harus terpenuhi.Jika
compare(a, b) < 0, makacompare(b, a) > 0juga harus terpenuhi.
Contoh fungsi yang tidak konsisten secara mandiri:
(left, right) -> CASE WHEN left <= right THEN -1L ELSE 0L END:Jika
a = 1danb = 1, fungsicompare(a, b)mengembalikan -1, dan fungsicompare(b, a)juga mengembalikan -1. Hasil ini bertentangan, sehingga fungsi tersebut tidak konsisten secara mandiri.(left, right) -> CASE WHEN left < right THEN -1L WHEN left = right THEN 0L ELSE 1L END:Jika
a = NULLdanb = 1, fungsicompare(a, b)mengembalikan 1 dan fungsicompare(b, a)juga mengembalikan 1. Hasil ini bertentangan, sehingga fungsi tersebut tidak konsisten secara mandiri.
Nilai kembali
Nilai yang dikembalikan adalah tipe ARRAY.
Contoh
Contoh 1: Mengurutkan elemen-elemen dalam
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 );Hasil berikut dikembalikan:
+------------+ | _c0 | +------------+ | [1,5,6] | +------------+Contoh 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);Hasil berikut dikembalikan:
+------+ | _c0 | +------+ | [{a:1, b:10}, {a:2, b:12}, {a:3, b:11}] | +------+
Fungsi terkait
ARRAY_SORT merupakan fungsi tipe kompleks. Untuk informasi lebih lanjut tentang fungsi-fungsi yang digunakan untuk memproses data dari tipe data kompleks seperti ARRAY, MAP, STRUCT, dan JSON, lihat Fungsi Tipe Kompleks.
Dalam contoh-contoh di atas, kombinasi tanda hubung dan tanda sudut penutup
(->)digunakan. Untuk informasi lebih lanjut tentang cara menggunakan kombinasi tanda hubung dan tanda sudut penutup(->)dalam fungsi Lambda, lihat Fungsi Lambda.