Django Postgresql生成的列需要多个整数数组列的总和
我有一个表,它有两个整数列和两个整数数组列,其中保存着分数。例如,我的行如下所示:Django Postgresql生成的列需要多个整数数组列的总和,django,postgresql,django-forms,postgresql-12,Django,Postgresql,Django Forms,Postgresql 12,我有一个表,它有两个整数列和两个整数数组列,其中保存着分数。例如,我的行如下所示: { 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_sco
{
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语句中每个数组的总和,通常如下所示:
SELECT *, (SELECT SUM(s) FROM UNNEST(first_term) s) as total_first_term from scores;
不幸的是,这在生成的列查询中不起作用,我们确实需要它成为生成的总分总和的一部分。首先创建一个函数,对数组的元素求和
create or replace
function array_sum (the_array integer[])
returns integer
language sql
immutable
as $$
select sum(a_element)::integer from (select unnest(the_array) a_element) u;
$$;
然后调用该函数来帮助计算您的总分列。(假设您的表已经存在)然后:
或者,您可以在调用函数之前连接数组:
alter table scores
add column total_score integer
generated always as
(physical_ed + array_sum(first_term || second_term))
stored;
我倾向于选择第一个,因为我认为它更清楚地表明了我的意图。但这不是一个强烈的偏好。两者产生相同的结果。见:
alter table scores
add column total_score integer
generated always as
(physical_ed + array_sum(first_term || second_term))
stored;