Android 安卓系统-简单/高效地维护;“累计金额”;对于SQLite列
在SQLite中维护特定数据列的“累积和”的最佳方法是什么?我在网上找到了几个例子,但我不能100%确定如何将这些方法集成到我的Android 安卓系统-简单/高效地维护;“累计金额”;对于SQLite列,android,sqlite,android-contentprovider,cumulative-sum,Android,Sqlite,Android Contentprovider,Cumulative Sum,在SQLite中维护特定数据列的“累积和”的最佳方法是什么?我在网上找到了几个例子,但我不能100%确定如何将这些方法集成到我的ContentProvider中 在以前的应用程序中,我尝试自己维护累积数据,每次向表中插入新数据时都会更新数据。例如,在下面的示例代码中,每次我添加一个值为score的新记录时,我都会根据其在前一行中的值手动更新cumulative_score的值 _id score cumulative_score 1 100 100 2 50
ContentProvider
中
在以前的应用程序中,我尝试自己维护累积数据,每次向表中插入新数据时都会更新数据。例如,在下面的示例代码中,每次我添加一个值为score
的新记录时,我都会根据其在前一行中的值手动更新cumulative_score
的值
_id score cumulative_score
1 100 100
2 50 150
3 25 175
4 25 200
5 10 210
然而,这远远不够理想,在处理包含许多列的表时会变得非常混乱。是否有一种方法可以在每次我在表中插入/更新记录时自动更新累积数据?如何将其集成到我的ContentProvider
实现中
我知道一定有办法做到这一点。。。我只是不知道怎么做。谢谢 最简单的方法可能是使用SQLite触发器。这是我所知道的最接近的 从“自动化”到“自动化”。只要有一个插入触发器,它接受上一个 累计总和,添加当前分数并将其存储在新行的累计值中 总和类似这样的内容(假设您订购的列是
\u id
):
确保触发器和原始插入件位于同一位置
交易对于score
列的任意更新,您必须
必须实现一个递归触发器,以某种方式找到下一个最高的id(可能通过按最小id选择)
在id大于当前id的行集合中),并更新其
累计金额
如果您反对使用触发器,您可以在
insert
和update
方法中的ContentProvider手动更新
你几乎被安卓上的SQLite锁定了,我看不出有什么理由不这么做
使用触发器
我假设你想把它作为一个优化,否则你只需计算需求总和(<代码> O(n)<代码> VS <代码> O(1)< /COD>,所以你必须考虑到“代码< N>代码>有多大,你需要多少次和?”p> 最简单的方法可能是使用SQLite触发器。这是我所知道的最接近的 从“自动化”到“自动化”。只要有一个插入触发器,它接受上一个 累计总和,添加当前分数并将其存储在新行的累计值中 总和类似这样的内容(假设您订购的列是
\u id
):
确保触发器和原始插入件位于同一位置
交易对于score
列的任意更新,您必须
必须实现一个递归触发器,以某种方式找到下一个最高的id(可能通过按最小id选择)
在id大于当前id的行集合中),并更新其
累计金额
如果您反对使用触发器,您可以在
insert
和update
方法中的ContentProvider手动更新
你几乎被安卓上的SQLite锁定了,我看不出有什么理由不这么做
使用触发器
我假设你想把它作为一个优化,否则你只需计算需求总和(<代码> O(n)<代码> VS <代码> O(1)< /COD>,所以你必须考虑到“代码< N>代码>有多大,你需要多少次和?”p>
CREATE TRIGGER calc_cumulative_score AFTER INSERT ON tablename FOR EACH ROW
BEGIN
UPDATE tablename SET cumulative_score =
(SELECT cumulative_score
FROM tablename
WHERE _id = (SELECT MAX(_id) FROM tablename))
+ new.score
WHERE _id = new._id;
END