gpt4 book ai didi

mysql - 通过触发器使用前一行和当前行的数据将总和插入到数据库的列中

转载 作者:行者123 更新时间:2023-11-30 00:18:11 25 4
gpt4 key购买 nike

有没有办法创建一个触发器来自动计算总和并更新数据库中的行?现在我有这个查询,它对我的​​行进行求和并显示总计。

Select
PreAgg.id,
PreAgg.debit,
@PrevBal := @PrevBal + PreAgg.debit As total
From
(Select
YT.id,
YT.debit
From
test.accounts YT
Order By
YT.id) As PreAgg,
(Select
@PrevBal := 0.00) As SqlVars

这给了我:

id debit total

1 1000 1000
2 2000 3000

我的问题是如何将其转换为触发器,在每次插入后计算总和并将其插入总计字段?请给我完整的详细信息和询问。谢谢。

经过一些研究后,我想出了这个触发器:

CREATE TRIGGER `update_bal` BEFORE INSERT ON `sp_records` FOR EACH ROW INSERT INTO ledger
SELECT
PreAgg.id,
PreAgg.tot_amnt,
@PrevBal := @PrevBal + PreAgg.tot_amnt as balance
from
( select
YT.id,
YT.tot_amnt
from
sp_records YT
order by
YT.id ) as PreAgg,
( select @PrevBal := 0.00 ) as SqlVars

但是当我在 sp_records 表中插入某些内容时,它不允许我更新表,并显示“列计数与第 1 行的值计数不匹配”。尽管没有这个触发器,它仍然可以正常工作。

我有两个表,一个是 sp_records,我想要其中的 tot_amnt 字段,另一个是分类帐,我想在其中插入“余额”。除了我提到的字段之外,这两个表还有其他字段。

CREATE TABLE `ledger` (
`id` int(11) NOT NULL,
`date` varchar(15) NOT NULL,
`debit` float NOT NULL,
`credit` float NOT NULL,
`balance` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

这是我的账本。

最佳答案

我认为您可以在表格上使用公式字段。您想要显示计算的位置。我之所以建议这个触发器可能会降低你的 SQL 引擎的性能。

(我没有足够的积分来添加评论,这就是我作为答案的原因。)

干杯。

关于mysql - 通过触发器使用前一行和当前行的数据将总和插入到数据库的列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com