选择整数数组数组的每个第一个元素到数组
发布时间:2020-12-13 18:05:49 所属栏目:百科 来源:网络整理
导读:如何选择整数数组的每个第一个元素到数组? {{1,2,3},{2,15,32},{5,16,14},…} – {1,5,…} 由于PostgreSQL允许在数组大小之外请求切片,并假设永远不会有超过999个子数组,我们可以使用这个怪异 WITH data AS ( SELECT array[array[1,3],array[2,32],array[5,
如何选择整数数组的每个第一个元素到数组?
{{1,2,3},{2,15,32},{5,16,14},…} – > {1,5,…}
由于PostgreSQL允许在数组大小之外请求切片,并假设永远不会有超过999个子数组,我们可以使用这个怪异
WITH data AS ( SELECT array[array[1,3],array[2,32],array[5,14]] as arr) SELECT array_agg(arr) FROM (SELECT unnest(arr[1:999][1]) as arr from data) data2; 如果需要的话,你当然可以增加999的常数,这只是我投入的一个随机大数字. 之所以如此复杂,是因为如果你只使用arr [1:999] [1],你仍会得到一个二维数组,但只有第一个元素.在这种情况下{{1},{2},{5}}.如果我们使用unnest(),我们可以将它变成一个集合,然后可以通过subselect将其输入到array_agg()中. 使用array_agg(unexst(arr [1:999] [1]))会很好,但聚合函数不喜欢集合,我不知道是否有办法在运行中转换它. 您也可以使用实际的数组长度,但这可能会导致不必要的计算 SELECT unnest(arr[1:array_length(arr,1)][1]) as arr from data 注意 如果阵列可以被一个级别取消,你可以只索引数组,然后使用array_agg()将它转换回一个语法更简单的数组 WITH data AS (SELECT array[1,3] as arr UNION ALL SELECT array[2,32] as arr UNION ALL SELECT array[5,14] as arr) SELECT array_agg(arr[1]) from data; CTE只用于输入数据,实际的肉是array_agg(arr [1]).这当然适用于任意数量的输入数组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |