Room SQL查询以检索实体键和值的总和

时间:2019-01-05 12:54:46

标签: android mysql sql android-room

我的数据库包含这些“运动”类的列表:

@PrimaryKey (autoGenerate = true)
private int NumeroDeOperacion;
private int FechaYear;
private int FechaMonth;
private int FechaDay;
private String TipoOperacion;
private String Category;
private String Notas;
private float Quantity;

在我的一个查询中,我只想检索CategoryQuantity,所以我创建了另一个POJO对象,如下所示:

public class Category {

    @ColumnInfo(name = "Category")
    public String name;

    @ColumnInfo(name = "Quantity")
    public float quantity;

    public Category(){}

}

我想要得到的是特定年份中所有不同的Category和所有Quantity的总和。

所以,假设我有这样的东西:

Category   Quantity

A          5
B          10
C          5
A          15
B          20

我想得到:

Category   Quantity

A          20
B          30
C          5

我尝试使用此查询,但是它只获取每个Category的最后一个条目:

@Query("SELECT DISTINCT Category, Quantity FROM OperacionesTable WHERE FechaYear = :year GROUP BY CategoryORDER BY Quantity DESC")
LiveData<List<Category>> getGastosCategoryTotalsInYear(int year);

任何帮助将不胜感激。

预先感谢

1 个答案:

答案 0 :(得分:0)

要对数量求和,必须使用SUM

此外,DISTINCT也不需要,因为GROUP BY已经解决了这一问题。我的猜测是您添加了distinct,因为有一个错误。出现错误的原因是,Quantity既不在分组依据列中,也不在聚合函数中使用。这通常是一个错误(MySQL中除外,这只会给您一个随机结果)。

无论如何,这应该可以解决问题:

SELECT 
  Category, 
  SUM(Quantity) as TotalQuantity -- Column alias, to give the column a proper name
FROM 
  OperacionesTable 
WHERE 
  FechaYear = :year 
GROUP BY 
  Category
ORDER BY SUM(Quantity) DESC