Considere o seguinte
mysql> create table test (sub1 int, sub2 int , sub3 int);
Query OK, 0 rows affected (0.11 sec)
mysql> insert into test values (20,30,40),(10,40,50),(30,10,20);
Query OK, 3 rows affected (0.08 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from test ;
+------+------+------+
| sub1 | sub2 | sub3 |
+------+------+------+
| 20 | 30 | 40 |
| 10 | 40 | 50 |
| 30 | 10 | 20 |
+------+------+------+
Então, para obter o
max1
e max2
das colunas você pode usar greatest
função. select * ,
greatest(sub1,sub2,sub3) as max1 ,
greatest(
case
when greatest(sub1,sub2,sub3) = sub1 then 0 else sub1
end,
case
when greatest(sub1,sub2,sub3) = sub2 then 0 else sub2
end,
case
when greatest(sub1,sub2,sub3) = sub3 then 0 else sub3
end
) as max2 from test ;
Isso lhe dará algo como
+------+------+------+------+------+
| sub1 | sub2 | sub3 | max1 | max2 |
+------+------+------+------+------+
| 20 | 30 | 40 | 40 | 30 |
| 10 | 40 | 50 | 50 | 40 |
| 30 | 10 | 20 | 30 | 20 |
+------+------+------+------+------+
Você pode usar isso para o comando de atualização como
update table_name
set
max1 = greatest(sub1,sub2,sub3),
max2 = greatest(
case
when greatest(sub1,sub2,sub3) = sub1 then 0 else sub1
end,
case
when greatest(sub1,sub2,sub3) = sub2 then 0 else sub2
end,
case
when greatest(sub1,sub2,sub3) = sub3 then 0 else sub3
end
)
Para obter a média de max1 e max2 e atualizar conforme
update table_name
set
`average`
= (
greatest(sub1,sub2,sub3)+
greatest(
case
when greatest(sub1,sub2,sub3) = sub1 then 0 else sub1
end,
case
when greatest(sub1,sub2,sub3) = sub2 then 0 else sub2
end,
case
when greatest(sub1,sub2,sub3) = sub3 then 0 else sub3
end
)
)/2 ;