Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào tôi có thể tính tổng giá trị trong cơ sở dữ liệu phòng android

Hãy thử thêm phương pháp tiếp theo vào dao của bạn:

@Query("UPDATE sum SET value = value + :addValue WHERE id =:id")
suspend fun updateSum(id: Int, addValue: Long)

Sau đó, bạn có thể gọi nó từ ViewModel / Activity của mình

CẬP NHẬT

Đối với một phương thức duy nhất để cập nhật / chèn, hãy đặt các phương thức này vào dao:

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertSum(model: Sum)

@Query("UPDATE sum SET value = value + :value WHERE id = :id")
suspend fun updateSum(id: Int, value: Long)

@Query("SELECT * FROM sum WHERE id = :id")
suspend fun getSumById(id: Int): Sum?

@Transaction
suspend fun updateOrInsertSum(sum: Sum) { // <-- this method updates value or insert new item, if id is not found
    getSumById(sum.id)?.let { updateSum(sum.id, sum.value) } ?: insertSum(sum)
}

Tất nhiên, bạn nên thêm phương thức updateOrInsertSum vào kho lưu trữ và mô hình xem của bạn. Sau đó, nếu bạn gọi id ='1' lần đầu tiên, giá trị sẽ được chèn:

viewmodel.updateOrInsertSum(Sum(1 ,10000)) // <-- id = 1, value = 10000

Trong lần gọi tiếp theo, mục sẽ được cập nhật với cùng một phương pháp:

viewmodel.updateOrInsertSum(Sum(1 ,20000)) // <-- id = 1, value = 10000+2000 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tốt hơn để chọn tất cả các cột từ bảng đầu tiên và chỉ một cột từ bảng thứ hai khi tham gia bên trong

  2. Kích hoạt MySQL nếu điều kiện tồn tại

  3. Phương ngữ ngủ đông cho MySQL 8?

  4. Cách tốt nhất để xử lý các vấn đề đồng thời

  5. Chèn dữ liệu vào bảng mySQL với java