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

问题描述 投票:0回答:1

我需要使用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;]

...有人知道我如何动态地实现此查询吗?

sql arrays postgresql sum slice
1个回答
1
投票

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

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列表中使用返回值的函数(嵌套)。最好将其放入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;
© www.soinside.com 2019 - 2024. All rights reserved.