Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Instrukcja UPDATE, aby ponownie przypisać wartość kolumny zgodnie z formułą numeryczną

CASE oświadczenie może pomóc. W tym przykładzie:

  • source , sam, jest na pozycji 8
  • target , bob, jest na pozycji 2

Zastępując zmienne rzeczywistymi wartościami, następująca instrukcja przesuwa wszystko w dół o 2 od źródła, pozostawia między elementami bez zmian, ustawia cel równy źródłu, przesuwa resztę w dół:

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)

To przeniosłoby coś na górę listy. Podobną logikę można zastosować do przesuwania listy w dół. Zakłada, że ​​liczby ujemne są w porządku, a interesująca jest tylko kolejność względna.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz ostatni wiersz z GROUP BY w MySQL

  2. Jak publikować parametry zapytania za pomocą Axios?

  3. Jak napisać funkcję mysql z dynamiczną nazwą tabeli?

  4. Wyłącz notację naukową MySQL

  5. Jak zmienić zestaw znaków z latin1 na UTF8 w MySQL?