返回总和和平均使用空间

Sut*_*rth 3 database android android-database android-room

我的表的结构如下:

@Entity(tableName = "userFitnessDailyRecords")

public class UserFitnessDailyRecords {



    @NonNull
    @PrimaryKey
    private Date forDay;
    private int stepCount;
}
Run Code Online (Sandbox Code Playgroud)

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

@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();

}
Run Code Online (Sandbox Code Playgroud)

编译后出现错误,因为列不包含求和和平均值字段,因此无法返回值。在这种情况下,一个收益和平均值如何计算?

Ray*_*aga 6

您正在从方法getUserFitnessSumAndAverageForLastThirtyDays()中返回UserFitnessDailyRecords条目。但是查询选择的列不会返回该类型的对象。

请记住,在SQL查询中使用“ AS”关键字来生成与POJO变量名称匹配的列名称别名。

您可以改为从该方法返回POJO,也许像这样:

Kotlin方式:

data class SumAveragePojo(var total: Float, var average: Float)
Run Code Online (Sandbox Code Playgroud)

Java方式:

class SumAveragePojo
{ 
    public float total;
    public float average;
}
Run Code Online (Sandbox Code Playgroud)

并更改方法返回类型,如下所示:

@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);
Run Code Online (Sandbox Code Playgroud)

  • 我已经在使用 pojo 不知道使用“as”的列名别名。这有效:) (2认同)