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

我需要使用postgresql从一个数组中求和一个子数组。

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

这些索引将来自同一表中的其他两列。

我在下面的查询中得到了子数组:

select i.name 
from items i
inner join categories c
    on  c.categoryid = i.categoryid
    and c.title not in ('Books','Cloths')

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

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;

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

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

无需子选择,只需使用列名:

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;
本文链接:https://www.f2er.com/3158744.html

大家都在问