PostgreSQL: как динамически вернуть подмассив, используя кусочки массива в postgresql - PullRequest
0 голосов
/ 05 ноября 2019

Мне нужно суммировать подмассив из массива, используя 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 при использовании срезов массива для выполнения запросаdynamic:


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

... кто-нибудь знает, как я могу выполнить этот запрос динамически?

1 Ответ

1 голос
/ 05 ноября 2019

Нет необходимости в дополнительном выборе, просто используйте имена столбцов:

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;

Обратите внимание, что не рекомендуется использовать функции возврата набора (unnest) в списке 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;
...