#android #sql #sqlite
#Android #sql #sqlite
Вопрос:
Я пишу приложение для Android, в котором хранятся даты тренировок и сожженные калории. Ниже приведен пример данных в моей таблице: это возвращается:
SELECT month, day, calories FROM workouts ORDER BY year ASC, month ASC, day ASC LIMIT 12;
(month | day | calories)
3|2|714
3|3|945
3|4|630
3|10|446
3|16|396
3|20|255
3|22|108
3|23|112
3|23|169
3|23|2160
код, который я написал для вышеупомянутого, является:
public Cursor getLastTwelveDays(){
Cursor c;
String[] s = {KEY_MONTH, KEY_DAY, KEY_CALORIES};
String order = KEY_YEAR " ASC, " KEY_MONTH " ASC, " KEY_DAY " ASC LIMIT 12" ;
c = db.query(WORKOUT_TABLE, s, null, null, null, null, order);
return c;
}
Я хотел бы объединить строки с тем же днем и месяцем в одну строку следующим образом:
3|2|714
3|3|945
3|4|630
3|10|446
3|16|396
3|20|255
3|22|108
3|23|2441 (112 169 2160)
Кроме того, было бы неплохо, если бы это было легко использовать с функцией запроса Android.
Заранее спасибо.
Ответ №1:
То, что вы ищете, — это предложение group by. Используйте метод SUM (), чтобы получить общее количество калорий за каждую дату. Я считаю, что предложение group by должно предшествовать предложению ORDER BY.
ВЫБЕРИТЕ месяц, день, СУММУ (калорий) Из ГРУППЫ тренировок ПО месяцам, дням
Комментарии:
1. Поскольку месяц и день указаны в предложении GROUP BY, им не нужна агрегирующая функция, такая как SUM().
2. Проверьте этот веб-сайт для более подробного примера shokhirev.com/nikolai/abc/sql/sql1.html
3. Большое спасибо! Сработало как по волшебству.
Ответ №2:
Похоже, вам нужен подзапрос (т. Е. Один запрос для вычисления СУММЫ ежедневных калорий внутри другого запроса, который получает общее количество калорий за день).
Попробуйте посмотреть примеры ЗАПРОСОВ и вложенных запросов. Возможно, функция запроса позволяет вам передавать в нее необработанный запрос, чтобы выполнить более сложный запрос, который вы описываете.
Ответ №3:
Не видя вашей схемы — посмотрите также на SUM и GROUP BY.