Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Instrução UPDATE para reatribuir um valor de coluna de acordo com uma fórmula numérica


Um CASE declaração pode ajudar. Neste exemplo:
  • a source , sam, está na posição 8
  • o target , bob, está na posição 2

Substituindo as variáveis ​​pelos valores reais, a instrução a seguir desloca tudo 2 para baixo da origem, deixa o entre os membros como está, define o destino igual à origem, move o resto para baixo:
postgres=> SELECT * FROM test order by sortval;
 name | sortval
------+---------
 bob  |       2
 tom  |       4
 mary |       6
 sam  |       8
 tim  |      10
(5 rows)


postgres=>      UPDATE test
postgres->        SET sortval = CASE WHEN sortval <= 2 THEN sortval - 2
postgres->                           WHEN sortval = 8  THEN 2
postgres->                           WHEN sortval >= 8 THEN sortval - 2
postgres->                           ELSE sortval
postgres->                           END;
UPDATE 5
postgres=> SELECT * FROM test order by sortval;
 name | sortval
------+---------
 bob  |       0
 sam  |       2
 tom  |       4
 mary |       6
 tim  |       8
(5 rows)

Isso moveria algo para cima na lista. Lógica semelhante pode ser aplicada para descer uma lista. E assume que números negativos são bons e que apenas a ordenação relativa é de interesse.