我需要使用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;]
...有人知道我如何动态地实现此查询吗?
不需要子选择,只需使用列名:
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;