加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间: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]).这当然适用于任意数量的输入数组.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读