选择整数数组数组的每个第一个元素到数组

前端之家收集整理的这篇文章主要介绍了选择整数数组数组的每个第一个元素到数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何选择整数数组的每个第一个元素到数组?
{{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]).这当然适用于任意数量的输入数组.

猜你在找的Postgre SQL相关文章