将ARRAY数组a中的元素根据comparator进行排序。
命令格式
array<T> array_sort(array<T> <a>, function<T, T, bigint> <comparator>)参数说明
a:必填。ARRAY数组。
array<T>中的T指代ARRAY数组元素的数据类型,数组中的元素可以为任意类型。comparator:必填。用于比较ARRAY数组中2个元素大小的函数(内建函数或自定义函数)或表达式。
comparator(a, b)的处理逻辑为:当a等于b时,返回0。当a小于b时,返回负整数。当a大于b时,返回正整数。如果comparator(a, b)返回NULL,则返回报错。重要ARRAY_SORT中的比较函数要求是自洽的,即:
compare(a, b) > 0,则要求compare(b, a) < 0。compare(a, b) = 0,则要求compare(b, a) = 0。compare(a, b) < 0,则要求compare(b, a) > 0。
不自洽函数示例如下:
(left, right) -> CASE WHEN left <= right THEN -1L ELSE 0L END:假如设置
a = 1,b = 1,则compare(a, b) = -1,compare(b, a) = -1,两个比较结果相互矛盾即函数不自洽。(left, right) -> CASE WHEN left < right THEN -1L WHEN left = right THEN 0L ELSE 1L END:假如设置
a = NULL,b = 1,则compare(a, b) = 1,compare(b, a) = 1,两个比较结果相互矛盾即函数不自洽。
返回值说明
返回ARRAY类型。
使用示例
示例1:对数组
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 );返回结果如下:
+------------+ | _c0 | +------------+ | [1,5,6] | +------------+示例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);返回结果如下:
+------+ | _c0 | +------+ | [{a:1, b:10}, {a:2, b:12}, {a:3, b:11}] | +------+
相关函数
该文章对您有帮助吗?