会议室DB选择所有项目的清单+这些项目的总和

时间:2018-06-25 14:39:33

标签: android android-room

我有2个来自ROOM DB的查询:

@Query("SELECT * FROM basket_items")
Flowable<List<BasketItem>> getAll();

@Query("SELECT SUM(count*amount) FROM basket_items")
Flowable<Long> totalSum();

如何将这些查询合并为一个查询?以及将返回哪种类型的模型?

2 个答案:

答案 0 :(得分:1)

“房间查询”可以返回POJO(而不是select sum(colvalue) from ( select unnest(array['col1', 'col2', 'col3']) as colname, unnest(array[col1, col2, col3]) as colvalue from my_table) x where colvalue <> 'Ab' and colvalue is not null ),因此您可以为DAO创建临时模型。

正如我在评论中已经问过的那样,我不知道您要达到什么目的(例如您想从这些查询中获得什么价值)。

但希望该示例可能会有所帮助:

YourDao.java

@Entity

其他答案

查询无法返回列表和总和。 SUM是汇总方法,您汇总列表。

因此,您可能要选择两个选项:

  1. 在查询中使用@Query("SELECT name AS nameItem, (count * amount) AS countItem FROM basket_items") Flowable<List<CountedBasketItem>> getAllCounted(); static class CountedBasketItem { String nameItem; Long countItem; }

  2. 或执行这两个Flowable并获得结果。

答案 1 :(得分:0)

您可以在 pojo 中创建字段 totalSum 并使用此查询

@Query("SELECT *,SUM(count*amount) AS totalSum FROM basket_items")
Flowable<List<BasketItem>> getAll();

你会得到所有表,字段 totalSum 是 SUM(count*amount)