我有Cursor
查询数据库。我有兴趣从列中获取所有数字,并对它们进行一些简单的统计(例如,平均值,标准差,而不是更多),这些数据将显示给用户。
我想念这里的整个模式。我应该将所有值存储在一个int[]
数组中,然后进行操作吗?我想到的唯一方法就是:
int entries = cursor.getCount();
int[] array = new int[entries];
for (int i = 0; i < entries; i++) {
cursor.moveToPosition(i);
array[i] = cursor.getInt(...);
}
此时我被卡住了,因为我不知道如何在int[]
上执行某些事情(甚至是简单的意思),而不是第二次for
。
作为第二次机会,我可以这样:
int entries = cursor.getCount();
float mean = 0;
for (int i = 0; i < entries; i++) {
cursor.moveToPosition(i);
int newValue = cursor.getInt(...);
mean = mean + newValue/entries;
}
return mean;
但它一直对我不好看。 而且,如果我需要计算更复杂的统计数据,事情会变得更糟。可以以某种方式避免这个for循环吗?还有更正确的方法吗?
答案 0 :(得分:0)
您可以使用sqlite的函数AVG
来计算平均值。要计算standard deviation
,您可以使用SUM
函数和AVG
。正如您在评论中正确陈述的那样
SELECT SUM((column - subquery.avg) * (column - subquery.avg)) / (COUNT(column)-1)
FROM table,
(SELECT AVG(column) AS avg FROM table) AS subquery
应该这样做