从会议室数据库总和查询中获取空值,并提供数据

时间:2019-10-04 14:32:48

标签: android kotlin android-room android-livedata

我有两个功能

    @Query("select sum(amount) as sum, dateString from databasetransaction where txnType='A' group by dateString")
    fun getExpensesTransaction(): LiveData<List<TxnByDate>>

    @Query("select COALESCE(sum(COALESCE(amount,0)), 0) from databasetransaction")
    fun getTotal() : LiveData<Int>

对于第一个查询,我正在获取带有对象的数据

{
  sum:2000,
  dateString:"04/10/2019"
}

对于第二个查询,我得到的值是null,有人可以帮忙吗,我在这里做错什么了?

1 个答案:

答案 0 :(得分:0)

我怀疑问题实际上可能不是查询本身,而是处理结果并将其放入Int中。

我认为您根本不需要COALESCE,当然也不需要两次,因为 total 聚合函数与 sum 函数的区别在于它不会返回,按照:-

  

sum()和total()聚合函数返回组中所有非NULL值的和。如果没有非NULL输入行,则sum()返回NULL,但total()返回0.0。 sum(X) total(X)

上面的结果是我怀疑正在发生的事情。您会得到一个带小数点的浮点,然后不能将其转换为Int并返回null。

您可以尝试使用:-

SELECT CAST(total(amount) AS INTEGER) from databasetransaction;