сумма возврата и среднее использование номера

Моя таблица имеет следующую структуру:

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

}

При компиляции я получаю сообщение об ошибке, которое не может вернуть значения, поскольку столбцы не содержат поля суммы и среднего значения. Как в этом случае вернуть сумму и среднее?


person Sutirth    schedule 11.06.2018    source источник


Ответы (1)


Вы возвращаете запись UserFitnessDailyRecords из своего метода getUserFitnessSumAndAverageForLastThirtyDays(). Но столбцы, выбранные вашим запросом, не возвращают объект такого типа.

Помните об использовании ключевого слова «AS» в вашем SQL-запросе для создания псевдонимов имен столбцов, которые соответствуют именам ваших переменных POJO.

Вместо этого вы можете вернуть POJO из этого метода, например, так:

Котлинский способ:

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);
person Raymond Arteaga    schedule 11.06.2018
comment
Я уже использовал pojo, не знал о псевдониме имени столбца, используя as. Это сработало :) - person Sutirth; 12.06.2018