使用 room 返回总和和平均值

11

我的表结构如下:

@Entity(tableName = "userFitnessDailyRecords")

public class UserFitnessDailyRecords {



    @NonNull
    @PrimaryKey
    private Date forDay;
    private int stepCount;
}

我编写的用于获取总和和平均值的查询语句如下:

@Dao
public interface UserFitnessDailyRecordsDao {


    @Query("SELECT SUM(stepCount), AVG(stepCount) FROM userFitnessDailyRecords where forDay BETWEEN :startDay AND :endDay ORDER BY forDay ASC")
    UserFitnessDailyRecords getUserFitnessSumAndAverageForLastThirtyDays(Date startDay, Date endDay);


    @Query("DELETE FROM userFitnessDailyRecords")
    void deleteUserFitnessDailyRecord();

}

在编译时,我遇到了一个错误:由于列中不包含sum和average字段,无法返回值。在这种情况下如何返回sum和average?

1个回答

24

你的getUserFitnessSumAndAverageForLastThirtyDays()方法返回了一个UserFitnessDailyRecords记录,但是由于查询选中的列没有返回该类型的对象。

记得在SQL查询中使用"AS"关键字来生成列名别名,以匹配你的POJO变量的名称。

你可以改为从该方法返回一个POJO,比如这样:

Kotlin方式:

data class SumAveragePojo(var total: Float, var average: Float)

Java的方式:

class SumAveragePojo
{ 
    public float total;
    public float average;
}

并且像这样更改方法的返回类型:

@Query("SELECT SUM(stepCount) as total, AVG(stepCount) as average FROM userFitnessDailyRecords where forDay BETWEEN :startDay AND :endDay ORDER BY forDay ASC")
SumAveragePojo getUserFitnessSumAndAverageForLastThirtyDays(Date startDay, Date endDay);

3
我以前已经在使用POJO,但不知道可以使用“as”来创建列名别名。这样做起作用了 :) - Sutirth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接