我有一個包含 4 個表的房間資料庫,我想在一個查詢中使用 GROUP BY 和 SUM。所以我到目前為止所做的:
@Query("SELECT *, SUM(increase) FROM transactions GROUP BY user_id")
fun groupBy(): LiveData<List<Transactions>>?
但SUM不起作用(它顯示了 user_id 的第一次增加。
例如:我有 2 個名為 MAX 和 Amir 的用戶,用戶 id 為 1 和 2
Amir(userId 1) 提交增加 100 美元并再次增加 50 美元。
Max(userId2) 提交增加 80 美元,再次增加 10 美元。
請看結果:
D/TAG: groupBy: 1 100
D/TAG: groupBy: 2 80
它應該顯示:
D/TAG: groupBy: 1 150
D/TAG: groupBy: 2 90
一點:我在資料庫中有一個名為 trans_id 的欄位,它代表 transactionId。每次我提交增加或減少或與用戶和金錢相關的任何其他內容時,我的應用程式都會自動生成一個 id,每次它自動生成 transactionId 時它都是 transactionId,但它與上一個不同。我在哪里使用它?當我想獲取所有用戶的交易時
我從中讀取資料的函式(在用戶串列片段中):
private fun groupBy() {
mUserListViewModel.groupBy()?.observe(viewLifecycleOwner, {
mUserListViewModel.group.value = it
it.forEach {
Log.d("TAG", "groupBy: ${it.userId} // ${it.increase}")
}
})
}
我的視圖模型:
val group = MutableLiveData<List<Transactions>>()
fun groupBy(): LiveData<List<Transactions>>? {
return mTransactionDAO.groupBy()
}
資料類:
data class Transactions(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "trans_id")
var transId: Long = 0L,
@ColumnInfo(name = "user_id", index = true) // <<<<< best to have an index on the column, not required
var userId: Long?,
@ColumnInfo(name = "create_date")
var createDate: String?,
@ColumnInfo(name = "bank_id")
var bankId: Long?,
@ColumnInfo(name = "description")
var description: String?,
@ColumnInfo(name = "increase")
var increase: String?,
@ColumnInfo(name = "decrease")
var decrease: String?,
@ColumnInfo(name = "loan_number")
var loanNumber: String?,
@ColumnInfo(name = "total")
var total: String?,
@ColumnInfo(name = "type")
var type: String?,
@ColumnInfo(name = "loan_id")
var loanId: Long?
)
我的資料庫
如果您需要更多代碼,請在評論部分告訴我
uj5u.com熱心網友回復:
當您使用 group by 子句時,需要列名洗掉 * 并像這樣添加特定的列名。
@Query("SELECT user_id, SUM(increase) FROM transactions GROUP BY user_id")
fun groupBy(): LiveData<List<Transactions>>?
uj5u.com熱心網友回復:
您的代碼不會讀取總和increase而是increase表的列,因為您使用*它選擇所有列。
撰寫查詢的正確方法是:
@Query("SELECT user_id, SUM(increase) AS increase FROM transactions GROUP BY user_id")
fun groupBy(): LiveData<List<userTotals>>?
這樣你就得到 2 列:user_id和總增加別名為increase。
您還需要為查詢結果創建一個新類:
data class userTotals(val user_id: Long?, val increase: Long?)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/405697.html
標籤:
上一篇:SQL列資料型別無限制
