Комнатный SQL-запрос для получения ключа сущности и суммы значений - PullRequest
0 голосов
/ 05 января 2019

Моя база данных содержит список этих классов "Движение":

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

Любая помощь будет принята с благодарностью.

Заранее спасибо

1 Ответ

0 голосов
/ 05 января 2019

Для суммирования количества вы должны использовать SUM.

Также нет необходимости в DISTINCT, поскольку GROUP BY уже позаботится об этом. Я думаю, что вы добавили отчетливый, потому что произошла ошибка. Ошибка была, потому что Количество не было ни в группе по столбцам, ни в статистической функции. Обычно это ошибка (за исключением 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...