Mysql
 sql >> Database >  >> RDS >> Mysql

Istruzione UPDATE per riassegnare un valore di colonna in base a una formula numerica

Un CASE la dichiarazione può aiutare. In questo esempio:

  • il source , sam, è alla posizione 8
  • il target , bob, è in posizione 2

Sostituendo le variabili con i valori effettivi, la seguente istruzione sposta tutto in basso di 2 dalla fonte, lascia i membri intermedi così com'è, imposta la destinazione uguale a source, sposta il resto in basso:

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)

Ciò sposterebbe qualcosa in cima alla lista. Una logica simile potrebbe essere applicata per spostarsi verso il basso di un elenco. E presuppone che i numeri negativi vadano bene e che solo l'ordinamento relativo sia di interesse.