У меня есть база данных SQLite выборки, в настоящее время имеет 7 записей, которые запрашиваются через:SQLite Как - Сумма по значению в РЕГИСТРИРУЙТЕСЬ
String selectQuery = "SELECT * FROM " + TABLE_TRANSACTIONS + " x " +
"JOIN (SELECT " + KEY_TYPE_ID + ", COUNT(*) count FROM " + TABLE_TRANSACTIONS + " GROUP BY " + KEY_TYPE_ID + " ORDER BY count DESC) y " +
"ON x.type_id = y.type_id " + //type_id vs. KEY_TYPE_ID as alias won't recognize KEY_TYPE_ID
"WHERE x.type_id = " + TagData.TYPE_EXPENSE;
Выход есть:
Type A = 2500
Type A = 2599
Type B = 45000
Type C = 299
Type C = 2699
Type C = 10000
Type C = 12000
, правильно группы мои типы по их соответствующим значениям. Тем не менее, идеальным выходом будет:
Type B = 45000
Type C = 24998
Type A = 5099
где каждый тип затем упорядочивается суммой каждого типа. Это возможно? Если да, то что еще я должен делать в своем запросе? Я относительно новичок в SQL и еще не понял этого. Заранее благодарю вас за любое понимание.
EDIT
на основе вашего ввода @CL. Теперь у меня есть более простой запрос:
String selectQuery = "SELECT *, SUM(" + KEY_AMOUNT + ") AS amount_sum " +
"FROM " + TABLE_TRANSACTIONS + " " +
"GROUP BY " + KEY_LABEL_ID + " " +
"ORDER BY amount_sum DESC";
, который работает, как ожидалось, когда я использую sqlfiddle в http://www.sqlfiddle.com/#!5/b3615/1, но не тогда, когда я использую запрос в Android. В Android возвращается только самая последняя запись для каждого типа метки. SUM, похоже, не выполняет свою работу.
Что мне здесь не хватает?
Большинство андроидов не имеют версии SQLite, поддерживающей CTE. –
@CL. , , Тогда OP может использовать подзапрос, как я упоминаю в ответе. –