从Android制作更好的sqlite查询

时间:2014-04-29 04:56:55

标签: java android sql sqlite subquery

我试图从桌子上获得每年的平均工资。我正在研究子查询,但我不确定这是否能解决我的问题。我已经通过使用多个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循环?

1 个答案:

答案 0 :(得分:0)

这将返回DICK每年所感知的平均工资(不是特定年份而是所有年份):

cursor5 = SQLiteDb.rawQuery("SELECT avg(salary) FROM " + TABLE_NAME + " WHERE user = '" + USER_ID + "' GROUP BY year", null);