PostgreSQL:如何在 postgresql 中使用数组切片动态返回子数组

悬念_嘿

我需要使用 postgresql 对数组中的子数组求和。

我需要创建一个 postgresql 查询,该查询将动态执行此操作,因为每个数组的上下索引都不同。

这些索引将来自同一个表中的另外两个列。

我有以下查询将获得子数组:

SELECT 
    SUM(t) AS summed_index_values
FROM 
    (SELECT UNNEST(int_array_column[34:100]) AS t 
     FROM array_table
     WHERE id = 1) AS t;

...但我随后意识到在使用数组切片使查询动态化时无法使用变量或 SELECT 语句:


int_array_column[SELECT array_index_lower FROM array_table WHERE id = 1; : SELECT array_index_upper FROM array_table WHERE id = 1;]

...有谁知道我如何动态地实现这个查询?

a_horse_with_no_name

不需要子选择,只需使用列名:

SELECT SUM(t) AS summed_index_values
FROM (
    SELECT UNNEST(int_array_column[tb.array_index_lower:tb.array_index_upper])  AS t 
    FROM array_table tb
    WHERE id = 1
) AS t;

请注意,不建议在 SELECT 列表中使用设置返回函数(unnest)。最好将其放入 FROM 子句中:

SELECT sum(t.val)
FROM (
    SELECT t.val
    FROM array_table tb
       cross join UNNEST(int_array_column[tb.array_idx_lower:array_idx_upper])  AS t(val)
    WHERE id = 1
) AS t;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章