我试图从桌子上获得每年的平均工资。我正在研究子查询,但我不确定这是否能解决我的问题。我已经通过使用多个Sqlite查询和for循环的组合来解决这个问题,但这很耗时,我想对此进行一次查询......但这可能吗?
Tablename = salaries
Columns = user, year, salary, month
月份将从01-12开始。列年将在同一年有12个输入。
这就是我的尝试:
SELECT min(year), max(year) FROM salaries WHERE user='DICK';
这将给我工资的开始和结束年份,而不是我想要的。
SELECT avg(salary) FROM salaries WHERE user='DICK';
这将给我所有工作年份的平均工资......几乎我想要的但我真的想要每年。
// I took the input from "SELECT min(year), max(year) FROM salaries WHERE user='DICK';" to get min and max for start-year and end-year
for (int i = startYearInt; i < (endYearInt + 1); i++) {
String currentYear = "" + i;
cursor5 = SQLiteDb.rawQuery("SELECT avg(salary) FROM "+ TABLE_NAME +" WHERE user='"+ USER_ID+"' AND year=" + currentYear, null);
while (cursor5.moveToNext()) {
String avgYearSalary = cursor5.getString(0);
Log.d("log", "avgYearSalary: " + currentYear + ": " + avgYearSalary.toString());
}
那么,如果我不想在桌面上运行多个查询,我怎么能解决这个问题呢?它是一个非常大的数据库,因此每个查询大约需要30秒。我认为数据库大约有250万行:)
如何进行更好的查询以便我可以停止使用for循环?
答案 0 :(得分:0)
这将返回DICK每年所感知的平均工资(不是特定年份而是所有年份):
cursor5 = SQLiteDb.rawQuery("SELECT avg(salary) FROM " + TABLE_NAME + " WHERE user = '" + USER_ID + "' GROUP BY year", null);