我有一个SQL数据库,有3列,像这样
IA1 IA2 IA3
现在我需要在三列(IA1, IA2和IA3)中找到前2个属性的平均值,并将该值存储在第三列FINAL_IA
中。
当前FINAL_IA
列没有值。其他列都没有空值,都是integer
类型的值。
例如,
IA1 IA2 IA3 FINAL_IA
-----------------------------
10 20 30
30 40 10
最终表应该是,
IA1 IA2 IA3 FINAL_IA
-----------------------------
10 20 30 25
30 40 10 35
编辑1
代码需要在运行SQLPlus的Linux机器上运行。下面是创建表ia
的方法,
create table ia (iid integer primary key, ia1 integer, ia2 integer, ia3 integer, finalia integer);
示例插入语句
insert into ia(iid, ia1, ia2, ia3) values (001, 30, 40, 10);
假设值都不同,您可以使用一个巨大的case
表达式:
select t.*,
(case when ia1 < ia2 and ia1 < ia3 then (ia2 + ia3) / 2
when ia2 < ia1 and ia2 < ia3 then (ia1 + ia3) / 2
when ia3 < ia2 and ia3 < ia1 then (ia1 + ia2) / 2
end)
from t;
在许多数据库中,有更简单的方法来编写它,例如:
select (ia1 + ia2 + ia3 - least(ia1, ia2, ia3)) / 2
编辑在尝试了代码之后,更改了第二种情况。
如果您提供一些基本脚本来创建初始状态(表,一些插入等)并提供sql方言,则会更容易。
但是让我们假设它是一个Postgres,所以:
update t set final_ia = greatest(ia1 + ia2, ia2 + ia3, ia1 + ia3) / 2;
应该起作用了。它从给定的计算表达式中取最大值,并使用它来更新最后一列。