Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Android创建更好的sqlite查询_Java_Android_Sql_Sqlite_Subquery - Fatal编程技术网

Java 从Android创建更好的sqlite查询

Java 从Android创建更好的sqlite查询,java,android,sql,sqlite,subquery,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

我想从一张桌子上得到一份平均年薪。我正在研究子查询,但我不确定这是否能解决我的问题。我已经通过使用多个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秒。我认为DB大约有250万行:


如何进行更好的查询,以便停止使用for循环?

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

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

纯魔法:这就是我想要的……谢谢!我能再问你一个问题吗?这将返回列表:salaryX salaryY salaryZ但是如果我也想要年份,那么它会变成列吗?YearyA,salaryX YearB,salaryY yearC,SalaryZ选择年,avgsalary?抱歉,在我尝试自己之前,我一直在想:选择avgsalary,从薪水中选择year,其中userId='EHANMAL'按年分组这是我最新的问题。现在我已经完成了…谢谢你的帮助,我现在正在为大约四个用户ID做这件事。这将是四个SQLite查询。但是我怎么能在一个查询中做到这一点呢?呃,对不起,我误解了。这样就简单多了:依次从薪资组中选择avgsalary、year、userId,然后依次从薪资组中选择userId