Room SQL 查询以检索实体键和值的总和
Room SQL query to retrieve entity key and sum of values
我的数据库包含这些列表 "Movement" class:
@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;
在我的一个查询中,我只想检索 Category
和 Quantity
,所以我创建了另一个 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);
如有任何帮助,我们将不胜感激。
提前致谢
要对数量求和,您必须使用 SUM
。
另外,不需要 DISTINCT
,因为 GROUP BY
已经解决了。我的猜测是你添加了不同的,因为有一个错误。错误在那里,因为 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
我的数据库包含这些列表 "Movement" class:
@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;
在我的一个查询中,我只想检索 Category
和 Quantity
,所以我创建了另一个 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);
如有任何帮助,我们将不胜感激。
提前致谢
要对数量求和,您必须使用 SUM
。
另外,不需要 DISTINCT
,因为 GROUP BY
已经解决了。我的猜测是你添加了不同的,因为有一个错误。错误在那里,因为 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