通过Cursor统计数据库列?

Making statistics on database columns through 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 循环吗?还有更正确的方法吗?

可以使用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

应该做