SQLite查询返回空游标而不是0

时间:2019-07-07 06:49:01

标签: android sqlite

我有一个查询,该查询应返回给定日期的总数Income - total expense

db.rawQuery("select (totIncome-totExpense) from  " +
   "((select coalesce(sum(amount),0) as totIncome from transaction_table where type=0 and date like '"+ ke+"'), " +
   "(select COALESCE(sum(amount),0) as totExpense from transaction_table where type=1 and date like '"+ ke+"'))",null);

但是如果在给定日期没有type=0的记录,查询将返回一个空游标,而不是-totExpense

1 个答案:

答案 0 :(得分:0)

您可以使用sum(case...)进行条件聚合:

db.rawQuery(
  "select coalesce(sum(case type when 0 then amount else 0 end) - sum(case type when 1 then amount else 0 end), 0) as result from transaction_table where date like ?",
  new String[] {ke}
);

通过这种方式,只需要扫描表格一次即可计算总和。
仅在表中没有该日期的行的情况下才需要功能coalesce()
我还从查询中取出了日期ke,并传递了它是一个更安全的参数。
如果like只是一个日期且不包含=ke之类的通配符,则可以使用%代替_