通过Cursor对数据库列进行统计?

时间:2015-03-29 12:11:21

标签: java android statistics android-cursor

我有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循环吗?还有更正确的方法吗?

1 个答案:

答案 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

应该这样做