Получение нулевого значения из запроса суммы базы данных комнаты с доступными данными - PullRequest
0 голосов
/ 04 октября 2019

У меня есть две функции в моем дао

    @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"
}

Для второго запроса я получаю нулевое значение в качестве значения, может кто-нибудьпомогите мне, что я тут не так делаю?

1 Ответ

0 голосов
/ 04 октября 2019

Я подозреваю, что проблема, возможно, связана не с запросом как таковым, а с обработкой результата и помещением его в Int.

Я не верю, что вам вообще нужен COALESCE, а не два случая, так как агрегатная функция total отличается от функции sum тем, что она неreturn null согласно: -

Агрегатные функции sum () и total () возвращают сумму всех ненулевых значений в группе. Если нет входных строк, отличных от NULL, то sum () возвращает NULL, а total () возвращает 0.0. сумма (X) всего (X)

Результатом вышеизложенного является то, что, как я подозреваю, происходит. Вы получаете число с плавающей запятой с десятичной точкой, которое затем не может быть преобразовано в Int, и возвращается ноль.

Вы можете попробовать использовать: -

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