如何在每笔交易后显示总金额?如何储存?
How to show total amount after each transaction? How it can be stored?
在数据库中有一个 table 存储硬币的交易记录。
看起来像这样:
Id
UserId
ChangeInBalance
Created
1
5
10
2021-09-08 12:00
2
5
-6
2021-09-08 12:30
3
5
-3
2021-09-08 12:35
我需要在 UI 中显示这些交易,每行显示“总金额”,如下所示:
ChangeInBalance
Created
Total
10
2021-09-08 12:00
10
-6
2021-09-08 12:30
4
-3
2021-09-08 12:35
1
这个问题的常见解决方案是什么?要在每个 table 插入时添加“TotalAmount”列和 calculate/store(我认为可能会出现并发问题)?或者在程序代码中计算总金额(因为交易是在页面中查询的,所以这应该不是问题)?或者有其他更好的解决方案?
非常感谢您!
我知道这可能是一个重复的问题,但我很难找到所需的答案,尽管我认为这个问题非常普遍(也许我不擅长谷歌搜索,抱歉 :( ))。
您可以按如下所示的方式使用求和等窗口函数
create table trx (Id int, UserId int, ChangeInBalance int, Created datetime);
insert into trx values
(1, 5, 10, '2021-09-08 12:00')
,(2, 5, -6, '2021-09-08 12:30')
,(3, 5, -3, '2021-09-08 12:35');
select *,
sum(changeinbalance) over (partition by userid order by created asc) as total
from trx
你可以使用如下求和分析函数
select UserId,ChangeInBalance,Created, Sum(ChangeInBalance) over (partition by UserId order by Created) as Total
from table name
您不必添加 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 因为它是由某些数据库自动完成的
在数据库中有一个 table 存储硬币的交易记录。
看起来像这样:
Id | UserId | ChangeInBalance | Created |
---|---|---|---|
1 | 5 | 10 | 2021-09-08 12:00 |
2 | 5 | -6 | 2021-09-08 12:30 |
3 | 5 | -3 | 2021-09-08 12:35 |
我需要在 UI 中显示这些交易,每行显示“总金额”,如下所示:
ChangeInBalance | Created | Total |
---|---|---|
10 | 2021-09-08 12:00 | 10 |
-6 | 2021-09-08 12:30 | 4 |
-3 | 2021-09-08 12:35 | 1 |
这个问题的常见解决方案是什么?要在每个 table 插入时添加“TotalAmount”列和 calculate/store(我认为可能会出现并发问题)?或者在程序代码中计算总金额(因为交易是在页面中查询的,所以这应该不是问题)?或者有其他更好的解决方案?
非常感谢您!
我知道这可能是一个重复的问题,但我很难找到所需的答案,尽管我认为这个问题非常普遍(也许我不擅长谷歌搜索,抱歉 :( ))。
您可以按如下所示的方式使用求和等窗口函数
create table trx (Id int, UserId int, ChangeInBalance int, Created datetime);
insert into trx values
(1, 5, 10, '2021-09-08 12:00')
,(2, 5, -6, '2021-09-08 12:30')
,(3, 5, -3, '2021-09-08 12:35');
select *,
sum(changeinbalance) over (partition by userid order by created asc) as total
from trx
你可以使用如下求和分析函数
select UserId,ChangeInBalance,Created, Sum(ChangeInBalance) over (partition by UserId order by Created) as Total
from table name
您不必添加 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 因为它是由某些数据库自动完成的