如何用Trino数组函数计算原始数组的相邻元素差值数组?
在Trino中计算数组相邻元素的差值数组
可以直接用Trino的数组函数实现这个需求,核心思路是通过切片拆分原数组为两个错位的子数组,再用zip_with函数配对计算差值。
具体SQL实现
SELECT my_arr, zip_with( slice(my_arr, 1, cardinality(my_arr) - 1), slice(my_arr, 2, cardinality(my_arr) - 1), (a, b) -> b - a ) AS arr_of_diffs FROM (SELECT ARRAY[3, 2, 5, 1, 2] AS my_arr);
函数说明
cardinality(my_arr):返回数组的元素个数,用于确定切片的长度slice(my_arr, 1, len):截取原数组从第1个元素开始的len个元素,这里取前n-1个元素(n是原数组长度)slice(my_arr, 2, len):截取原数组从第2个元素开始的len个元素,得到错位的子数组zip_with(arr1, arr2, func):将两个数组按位置一一配对,对每对元素执行指定的计算函数,最终生成新的结果数组
执行结果
| my_arr | arr_of_diffs |
|---|---|
| {3,2,5,1,2} | {-1,3,-4,1} |
内容的提问来源于stack exchange,提问作者Emman
相关产品推荐
相关产品推荐

