这就是我的桌子的样子
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")
)
您需要使用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
不同)。