通过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
应该做
我有一个 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
应该做