如何获取 Room 数据库中按日期分组的列的总和?

问题描述 投票:0回答:1

这就是我的桌子的样子

listOf(
    MyClass(id = 1, cost = 10, qty = 2, date = "10-10-2024"),
    MyClass(id = 2, cost = 11, qty = 1, date = "10-10-2024"),
    MyClass(id = 3, cost = 15, qty = 2, date = "11-10-2024"),
    MyClass(id = 4, cost = 20, qty = 3, date = "12-10-2024")
)

getTotalCostOfDates(["10-10-2024", "11-10-2024"])
应该产生 ->

 listOf(
    CostClass(cost = 31, date = "10-10-2024"),
    CostClass(cost = 30, date = "11-10-2024")
 )
android kotlin group-by android-room
1个回答
0
投票

您需要使用SQL的GROUP BY子句:

@Query("SELECT SUM(cost*qty) AS cost, date FROM myclass WHERE date IN (:dates) GROUP BY date")
suspend fun getTotalCostOfDates(dates: List<String>): List<CostClass>

对于您访问的不属于 GROUP BY 子句的每个字段,您需要指定如何聚合它。由于您希望对值进行求和,因此需要使用 SUM()。

作为返回值,您可以简单地使用任何具有匹配参数的类,如下所示:

data class CostClass(
    val cost: Int,
    val date: String,
)

由于它不是 Room 实体,因此不需要添加到 @Database 注释(与

MyClass
不同)。

© www.soinside.com 2019 - 2024. All rights reserved.