SQL中前2列的平均值



我有一个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;

应该起作用了。它从给定的计算表达式中取最大值,并使用它来更新最后一列。

最新更新