У меня есть таблица, в которой есть 2 столбца целых чисел и 2 столбца массива целых чисел, в которых хранятся оценки. Например, моя строка будет выглядеть следующим образом:
{
physical_ed: 40,
music: 90,
first_term: {10,23,43},
second_term: {1,5,5,7}
}
Поля массива объявляются как целое число[].
Мне нужно создать столбец оценок, который суммирует все эти поля. До сих пор я пробовал:
ALTER TABLE scores DROP IF EXISTS score;
ALTER TABLE scores add COLUMN total_score integer GENERATED ALWAYS AS (physical_ed::integer +
first_term[3]::integer + second_term[1]::integer + second_term[2]::integer + second_term[3]::integer)
STORED;
Проблема, с которой я столкнулся выше, заключается в том, что она не учитывает различные значения в массиве, но иногда это поле может иметь 5 разных значений вместо 3.
Я попытался запустить оператор выбора, и я могу вычислить сумму каждого массива в операторе выбора, как правило, так:
SELECT *, (SELECT SUM(s) FROM UNNEST(first_term) s) as total_first_term from scores;
К сожалению, это не работает внутри сгенерированного запроса столбца, и нам нужно, чтобы он был частью нашей сгенерированной суммы total_score.