【问题标题】:In Room db Dao class- how to get values from table by comparing distinct values of a column?在 Room db Dao 类中 - 如何通过比较列的不同值从表中获取值?
【发布时间】:2019-10-21 10:30:48
【问题描述】:

我正在处理 Room 数据库,我想通过比较类别列中的不同值从 IncomeExpense 表中获取两列值(类别和总量)。让我解释一下,例如在类别列中有 4 行具有相同的值(现金),我想要计算类别为现金和类别值(在本例中为现金)的金额列的总金额。 我从另一个表(类别表)中获取这些类别值,用户可以在其中添加编辑或删除类别。
问题是我不知道如何将类别与用户在类别列中添加的那些值进行比较,在这种情况下是动态的。

这是我的实体类。

@Entity
public class IncomeExpense  {
    @PrimaryKey(autoGenerate = true)
    private int id =0;

    private String type;
    private int amount;
    private String category;
    private String date;
    private String time;
    private String mode;
    private String note;

这是我必须编写此查询的 Dao 类

@Query("SELECT SUM(amount), category from IncomeExpense WHERE category like 'What should I write here to get these values in this case'");

我只是想在这种情况下获得总金额和类别值

【问题讨论】:

    标签: android sql android-room


    【解决方案1】:

    您可以使用group by 子句,这将返回一个关于收入支出的列表,但金额将按类别分组

    @Query("SELECT SUM(amount) as amount,category from IncomeExpense GROUP BY category");
    public List<IncomeExpense> getCategoryPrice();
    

    例如: 数据库有: [ (10, Cash), (50, Cash), (20, Credit), (10, Credit) ]

    以上查询将返回 [ (60, Cash), (30, Credit) ]

    【讨论】:

    • 非常感谢。我希望这能解决我的问题。我在编程方面相当新,我可以将方法设置为像这样的 LiveData 类型LiveData&lt;List&lt;IncomeExpense&gt;&gt; getCategoryPrice();,因为在这种情况下,我不必编写 AsyncTask 方法,这对我来说是编写该代码的另一个挑战。
    • 是的,您可以为此使用LiveData。如果有效,请放弃投票和绿色勾号。谢谢:)
    • 我尝试了你的建议,这给了我想要的完美输出。我给了你赞成票和绿色勾号,因为你应得的......如果我的问题是有效的,请给我投票......非常感谢你再次祝福
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多